如何解决Elasticsearch:突出显示查询词,而不是过滤词?
说我有这个:
search_object = {
'query': {
'bool' : {
'must' : {
'simple_query_string' : {
'query': search_text,'fields': [ 'french_no_accents','def_no_accents',],},'filter' : [
{ 'term' : { 'def_no_accents' : 'court',{ 'term' : { 'def_no_accents' : 'bridge','highlight': {
'encoder': 'html','fields': {
'french_no_accents': {},'def_no_accents': {},'number_of_fragments' : 0,}
...我输入的任何搜索字符串作为 search_text
、它的组成术语以及“court”和“bridge”都被突出显示。我不希望突出显示“法院”或“桥梁”。
我尝试将“突出显示”键值放在结构中的不同位置...似乎没有任何效果(即抛出语法异常)。
更一般地说,是否有任何地方都有正式的语法来指定您可以使用 ES (v7) 查询做什么和不能做什么?
解决方法
您可以添加 highlight query 来限制应该和不应该突出显示的内容:
{
"query": {
"bool": {
"must": {
"simple_query_string": {
"query": "abc","fields": [
"french_no_accents","def_no_accents"
]
}
},"filter": [
{ "term": { "def_no_accents": "court" } },{ "term": { "def_no_accents": "bridge" } }
]
}
},"highlight": {
"encoder": "html","fields": {
"*_no_accents": { <--
"highlight_query": {
"simple_query_string": {
"query": "abc","fields": [ "french_no_accents","def_no_accents" ]
}
}
}
},"number_of_fragments": 0
}
}
我对这两个字段使用了通配符 (*_no_accents
) -- 如果它也匹配不需要的字段,则您需要像最初一样在两个单独的非通配符突出显示字段上复制突出显示查询有。虽然我想不出会发生这种情况的场景,因为您的 multi_match
查询针对两个具体字段。
关于:
更一般地说,是否有任何地方都有正式的语法来指定您可以使用 ES (v7) 查询做什么和不能做什么?
你到底在寻找什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。