query_string似乎正在返回与ES 2.4中的字段参数中指定的字段匹配的所有术语的文档,而在ES6.8中,每个字段中匹配所有术语的文档将被返回。
复制步骤:将下列文件插入ES 2.4和ES 6.8组:
PUT yields_test/il4/1
{
"security_name":"high term1",
"doc_type":"YIELDS"
}
PUT yields_test/il4/2
{
"security_name":"high term2",
"doc_type":"YIELDS"
}
PUT yields_test/il4/3
{
"security_name":"low term2",
"doc_type":"YIELDS"
}
PUT yields_test/il4/4
{
"security_name":"low term1",
"doc_type":"YIELDS"
}
PUT yields_test/il4/5
{
"security_name":"high yield",
"doc_type":"YIELDS"
}
PUT yields_test/il4/6
{
"security_name":"high yields",
"doc_type":"YIELDS"
}
PUT yields_test/il4/7
{
"security_name":"high term3",
"doc_type":"YIELD"
}并尝试在这两个查询中使用以下query_string查询进行搜索:
GET yields_test/_search
{
"query": {
"query_string": {
"fields": [
"security_name",
"doc_type"
],
"query": "high yield",
"default_operator": "AND"
}
}
}ES 2.4返回下列文件:
[
{
"_index": "yields_test",
"_type": "il4",
"_id": "7",
"_score": 0.5098911,
"_source": {
"security_name": "high term3",
"doc_type": "YIELD"
}
},
{
"_index": "yields_test",
"_type": "il4",
"_id": "5",
"_score": 0.08322528,
"_source": {
"security_name": "high yield",
"doc_type": "YIELDS"
}
}
]而ES 6.8则返回以下内容:
[
{
"_index": "yields_test",
"_type": "il4",
"_id": "5",
"_score": 0.5753642,
"_source": {
"security_name": "high yield",
"doc_type": "YIELDS"
}
}
]通过在请求体中使用配置文件字段,我能够找到版本之间的更改。为两者创建的Lucene查询是不同的。
Es2.4:+(security_name:high | doc_type:high) +(security_name:yield | doc_type:yield)生成的Lucene查询
由ES 6.8:((+security_name:high +security_name:yield) | (+doc_type:high +doc_type:yield))
关于如何返回ES 6.8中相同的文件,我的另一个问题仍然存在。
发布于 2021-12-10 06:36:07
您可以使用bool查询:
{
"query" : {
"bool" : {
"must" : [
{"query_string": {
"fields": [ "security_name","doc_type" ],
"query": "high",
}},
{ "query_string": {
"fields": [ "security_name","doc_type" ],
"query": "yeild", }}
]
}
}
}https://stackoverflow.com/questions/70181749
复制相似问题