我有一个包含重复文本内容的文档的索引,我需要检索具有完全相同的值而不是相似的值的文档。因此,例如,将以下各行视为不同文档的“文本”属性的值:
因此,我需要检索的只是两个标有(*)的文档。我试过了:
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
。
使用此例如。
{
"query": {
"term": {
"text.keyword": {
"value": "The car"
}
}
}
}
上面的查询将仅返回2个结果。但是,如果您想获取所有结果,请执行
Match
查询{
"query": {
"match": {
"text": "The car"
}
}
}
这将返回所有四个结果。
希望这可以帮助
关于elasticsearch - Elasticsearch:在字段中获取具有特定值的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57290419/