如何在Elasticsearch的multi_match查询中为指定字段设置模糊性?
如何在Elasticsearch的multi_match查询中为指定字段单独设置模糊度?
你当前的multi_match查询会对所有指定字段应用相同的模糊度规则:
query: { multi_match: { query: searchQry, fields: ["field1", "field2", "field3"], fuzziness: 2, fuzzy_transpositions: true, }, },
要实现仅给指定字段(比如field1+field2,或field1+field3)应用模糊度,其他字段不生效,有两种常用方案:
方案一:在fields数组中为单个字段指定模糊度
在multi_match的fields参数里,通过字段名~模糊度的语法,为需要模糊匹配的字段单独设置fuzziness,不需要模糊的字段直接写名称即可。
比如仅给field1和field2应用fuzziness=2,field3不启用模糊:
query: { multi_match: { query: searchQry, fields: ["field1~2", "field2~2", "field3"], fuzzy_transpositions: true } }
如果需要给不同字段设置不同模糊度,也可以直接调整~后面的数值,比如field1~1、field2~2。
方案二:用bool查询组合多个match子句
如果需要更精细的控制(比如给不同字段设置不同的模糊参数,或添加其他匹配规则),可以使用bool查询的should子句,组合多个独立的match查询,每个match单独配置是否启用模糊:
比如仅给field1和field3应用模糊度,field2不启用:
query: { bool: { should: [ { match: { field1: { query: searchQry, fuzziness: 2, fuzzy_transpositions: true } } }, { match: { field2: { query: searchQry // 不设置fuzziness参数,默认禁用模糊匹配 } } }, { match: { field3: { query: searchQry, fuzziness: 2, fuzzy_transpositions: true } } } ], minimum_should_match: 1 // 控制至少需要匹配一个子句,可根据需求调整 } }
内容的提问来源于stack exchange,提问作者ham17
相关产品推荐
相关产品推荐

