Elasticsearch:突出显示查询词,而不是过滤词?
Elasticsearch: highlight on query terms, not filter terms?
假设我有这个:
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
查询针对两个具体字段。
至于:
More generally, is there a formal grammar anywhere specifying what you can and can't do with ES (v7) queries?
你到底在找什么?
假设我有这个:
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
查询针对两个具体字段。
至于:
More generally, is there a formal grammar anywhere specifying what you can and can't do with ES (v7) queries?
你到底在找什么?