如何在Elasticsearch统一高亮器中将空格视为逻辑与
Elasticsearch高亮查询空格设为逻辑与的解决方法
你遇到的问题本质不是高亮配置的问题,而是查询语句的默认解析逻辑导致的——Elasticsearch的query_string查询默认把空格解析为逻辑或(OR),所以你写的类似(flutter This part...)的内容里,空格会被当成OR处理,不符合你要的逻辑与需求。require_field_match参数仅控制高亮是否匹配目标字段,和查询解析逻辑无关。
当前你的高亮配置如下:
highlight: { number_of_fragments: 5, fragment_size: 100, require_field_match: 'true', pre_tags: ['<mark style="background-color: #ffff00;">'], post_tags: ['</mark>'], fields: [ { title: { number_of_fragments: 0, }, }, { description: { number_of_fragments: 0, }, }, { 'attrs.prettyName': { number_of_fragments: 0, }, }, ], },
解决方法
要让空格被解析为逻辑与,只需在你的query_string查询中添加default_operator: "AND"参数,这样所有未指定逻辑运算符的空格都会被当作AND处理:
{ "query": { "query_string": { "query": "\"New Zealand\" | (flutter This part should be treated as logical and words)", "default_operator": "AND" } }, "highlight": { // 保留你原有的高亮配置 number_of_fragments: 5, fragment_size: 100, require_field_match: 'true', pre_tags: ['<mark style="background-color: #ffff00;">'], post_tags: ['</mark>'], fields: [ { title: { number_of_fragments: 0, }, }, { description: { number_of_fragments: 0, }, }, { 'attrs.prettyName': { number_of_fragments: 0, }, }, ], } }
如果只是特定部分需要逻辑与,也可以手动在关键词间添加AND(比如flutter AND This AND part...),但全局设置default_operator更适配你的需求。
内容的提问来源于stack exchange,提问作者Amr Shawki
相关产品推荐
相关产品推荐

