在过滤器与查询上下文中的bool查询中运行模糊查询时,我看到了一些奇怪的效果 . 我在Elasticsearch 6.0.0上 .
我有一个索引,其文档有一个字段 firstName
. 如果我运行以下代码,例如:
{
"query": {
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 1
}
}
}
}
我得到5596次点击 . 现在,如果我将模糊术语放在bool must子句中:
{
"query": {
"bool": {
"must": [
{
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 1
}
}
}
]
}
}
}
我仍然得到5596.如果我将must更改为filter子句:
{
"query": {
"bool": {
"filter": [
{
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 1
}
}
}
]
}
}
}
同样,5596再次 . 不足为奇,对吗?
让我们将 fuzziness
更改为2而不是1.再次运行简单模糊项查询:
{
"query": {
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 2
}
}
}
}
现在我得到6079次点击 . 较大的编辑距离应该匹配更多的文档,似乎合理 . 现在我再次将它作为必须条款放在bool查询中:
{
"query": {
"bool": {
"must": [
{
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 2
}
}
}
]
}
}
}
仍然是6079.现在将must子句更改为过滤器:
{
"query": {
"bool": {
"filter": [
{
"fuzzy": {
"firstName": {
"value": "yvonne",
"fuzziness": 2
}
}
}
]
}
}
}
这将返回7980次点击 .
据我了解,bool查询中must和filter子句之间的唯一区别是命中是否得分 . 但这似乎不是真的;在过滤器上下文中运行模糊查询似乎使查询的选择性降低 . 我错过了什么?可能是什么导致了这个?