Elasticsearch:获取字段中具有特定值的文档
Elasticsearch: getting documents with exactly a certain value in a field
我有一个包含一些重复文本内容的文档的索引,我需要检索具有完全相同值而不是相似值的文档。因此,例如,将以下每一行视为不同文档的 "text" 属性 的值:
- 车子出事了
- 汽车(*)
- 他开车
- 汽车(*)
所以我需要的是只检索标有 (*) 的两个文档。我试过了:
GET news/_search
{
"_source": ["text"],
"min_score": 1,
"query": {
"simple_query_string" : {
"query": "The car",
"fields": ["text"],
"flags": "NONE",
"minimum_should_match": "100%"
}
}
}
但它总是检索所有 4 个文档。我也尝试了 match_phrase 并且得到了相同的结果。
PS:我需要能够 运行 两个查询:一个检索 4 个文档,另一个检索 2 个文档。
这是映射:
{
"news" : {
"aliases" : { },
"mappings" : {
"tweet" : {
"properties" : {
"text" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
...
}
}
}
}
}
有什么想法吗?
谢谢
对于完全匹配,您应该在字段的关键字类型上使用 elasticsearch 的 Term Query
。
将此用于 ex.
{
"query": {
"term": {
"text.keyword": {
"value": "The car"
}
}
}
}
以上查询将 return 只有 2 个结果。但是如果你想获取所有结果,请使用 Match
query
{
"query": {
"match": {
"text": "The car"
}
}
}
这将 return 你所有的四个结果。
希望对您有所帮助
我有一个包含一些重复文本内容的文档的索引,我需要检索具有完全相同值而不是相似值的文档。因此,例如,将以下每一行视为不同文档的 "text" 属性 的值:
- 车子出事了
- 汽车(*)
- 他开车
- 汽车(*)
所以我需要的是只检索标有 (*) 的两个文档。我试过了:
GET news/_search
{
"_source": ["text"],
"min_score": 1,
"query": {
"simple_query_string" : {
"query": "The car",
"fields": ["text"],
"flags": "NONE",
"minimum_should_match": "100%"
}
}
}
但它总是检索所有 4 个文档。我也尝试了 match_phrase 并且得到了相同的结果。
PS:我需要能够 运行 两个查询:一个检索 4 个文档,另一个检索 2 个文档。
这是映射:
{
"news" : {
"aliases" : { },
"mappings" : {
"tweet" : {
"properties" : {
"text" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
...
}
}
}
}
}
有什么想法吗?
谢谢
对于完全匹配,您应该在字段的关键字类型上使用 elasticsearch 的 Term Query
。
将此用于 ex.
{
"query": {
"term": {
"text.keyword": {
"value": "The car"
}
}
}
}
以上查询将 return 只有 2 个结果。但是如果你想获取所有结果,请使用 Match
query
{
"query": {
"match": {
"text": "The car"
}
}
}
这将 return 你所有的四个结果。
希望对您有所帮助