在elasticsearch查询

时间:2017-07-10 07:58:56

标签: elasticsearch

我有一个问题要理解搜索逻辑。我有一个Elasticsearch 5.4实例并进行query_string查询。默认运算符是OR。其他设置未定义 现在我搜索

dog house

获得10,500个结果。然后我搜索

house dog

只获得6,200个结果。这对我来说有点好奇。

这是我的疑问:

{
    "query" : {
        "bool" : {
            "must" : [
                {
                    "query_string" : {
                        "query" : "dog house~",
                        "default_operator" : "OR",
                        "fuzziness" : "AUTO"
                    }
                },
                {
                    "term" : {
                        "client" : {
                            "value" : "MyClient",
                            "boost" : 1
                        }
                    }
                },
                {
                    "range" : {
                        "dateCreate" : {
                            "gte" : "2000-01-01T00:00:00+0200",
                            "lte" : "2000-12-31T23:59:59+0200"
                        }
                    }
                }
            ]
        }
    },
    "size" : 2,
    "from" : 0,
    "sort" : [
        {
            "_score" : {
                "order" : "desc"
            }
        }
    ],
    "collapse" : {
        "field" : "title.keyword"
    }
}

1 个答案:

答案 0 :(得分:0)

这是因为~运算符。如果您尝试删除它并再次运行查询,则如果查询为dog househouse dog,则该数字应相同。

如果您运行dog house~house~ dog,即使结果数量也应相同,但如果您将~从一个房间改为另一个房子,则数字会发生变化。

如果您希望两个单词指定模糊搜索可以匹配的换位距离1,您可以尝试使用house~ dog~,然后如果更改顺序,结果将是相同的。