2016-05-12 59 views
2

这里是我的查询:弹性:是否可以禁用某些领域的模糊性?

"multi_match":{ 
    "query":"test", 
    "fields":[ 
     "name^2", 
     "sortName^2", 
     "externalId", 
     "type^0.5" 
    ], 
    "type":"best_fields", 
    "tie_breaker":0.3, 
    "minimum_should_match":"30%", 
    "fuzziness":"AUTO" 
} 

我的目标是具有模糊性上,除了“外部ID”各个领域的合作。原因在于,用户在搜索特定ID时找到许多结果是没有意义的。

我会假设如果一个字段设置为'not_analyzed'它不会应用模糊性,但它似乎并非如此。

有没有一种方法可以在映射中指定一个字段不适合模糊?

+0

有在映射没有办法告诉。查询时应用模糊 –

回答

1

当你需要设置每场模糊,我看到2种方法至今:

  • 要么dis_maxbool查询

  • 使用有些笨拙query_stringfuzziness设置为0合并2个查询为externalId字段。查询可能看起来像:

    { 
        "query": { 
        "query_string": { 
         "query": "name:test^2 sortName:test^2 externalId:test~0 type:test^0.5" 
        } 
        } 
    } 
    
+0

它似乎不起作用。它没有给我完全匹配的结果。也许我错过了一些东西,你能给这个操作员发一个参考吗? Google在搜索“〜”或“代字号”时没有多大帮助 – David

+0

是的,我的糟糕,它不工作,我错过了。这是我想到的参考:http://lucene.apache.org/core/3_0_3/queryparsersyntax.html#Fuzzy搜索 – Slam

+0

感谢大满贯。我相信“dis_max”会在这里工作,因为它应该与我现在使用的“best_fields”具有相同的效果。我的用例更复杂(我在这里发布了一个简化版本),现在我无法实现并测试,一旦我测试它,我会再次更新。 – David

相关问题