elasticsearch - Elasticsearch 没有突出显示所有匹配项
问题描述
我很难理解为什么以下查询对象不会使 ES 突出显示 _source 列中的所有单词。
{
_source: [
'baseline',
'cdrp',
'date',
'description',
'dev_status',
'element',
'event',
'id'
],
track_total_hits: true,
query: {
bool: {
filter: [],
should: [
{
multi_match:{
query: "imposed calcs",
fields: ["cdrp","description","narrative.*","title","cop"]
}
}
]
}
},
highlight: { fields: { '*': {} } },
sort: [],
from: 0,
size: 50
}
通过运行此查询,我得到以下高亮对象返回。请注意,仅突出显示“calcs”一词。如何构建突出显示对象以使 ES 突出显示“强加”?
"highlight": {
"description": [
"GAP Sub-window conn ONe-e: heve PP-BE Defined ASST requirem RV confsng, des MAN Imposed <em>calcs</em> mising"
]
}
我正在使用以下“描述”映射:
"description": {
"type": "text",
"analyzer": "search_synonyms"
},
"analysis": {
"analyzer": {
"search_synonyms": {
"tokenizer": "whitespace",
"filter": [
"graph_synonyms"
],
"normalizer": [
"normalizer_1"
]
}
},
"filter": {
"graph_synonyms": {
"type": "synonym_graph",
"synonyms_path": "synonym.txt"
}
},
"normalizer": {
"normalizer_1": {
"type": "custom",
"char_filter": [],
"filter": ["lowercase", "asciifolding"]
}
}
}
解决方案
编辑
我认为您的graph_synonyms
过滤器正在覆盖规范器的过滤器。试试这个:
PUT highlighter
{
"settings": {
"analysis": {
"analyzer": {
"search_synonyms": {
"tokenizer": "whitespace",
"filter": [
"graph_synonyms",
"lowercase",
"asciifolding"
]
}
},
"filter": {
"graph_synonyms": {
"type": "synonym_graph",
"synonyms_path": "synonym.txt"
}
}
}
},
"mappings": {
"properties": {
"description": {
"type": "text",
"analyzer": "search_synonyms"
}
}
}
}
原来的
我怀疑您的映射中有某种设置阻止了匹配,因为我无法使用半默认映射复制它:
PUT highlighter
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"properties": {
"description": {
"type": "text",
"fields": {
"lowercase": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
}
}
POST highlighter/_doc
{
"description": "GAP Sub-window conn ONe-e: heve PP-BE Defined ASST requirem RV confsng, des MAN Imposed calcs mising"
}
插入您的查询
GET highlighter/_search
{
"_source": [
"baseline",
"cdrp",
"date",
"description",
"dev_status",
"element",
"event",
"id"
],
"track_total_hits": true,
"query": {
"bool": {
"filter": [],
"should": [
{
"multi_match": {
"query": "imposed calcs",
"fields": [
"cdrp",
"description.lowercase",
"narrative.*",
"title",
"cop"
]
}
}
]
}
},
"highlight": {
"fields": {
"*": {}
}
},
"sort": [],
"from": 0,
"size": 50
}
屈服
[
{
"_index":"highlighter",
"_type":"_doc",
"_id":"Bf5F5HEBW-D5QnrWwTyh",
"_score":0.5753642,
"_source":{
"description":"GAP Sub-window conn ONe-e: heve PP-BE Defined ASST requirem RV confsng, des MAN Imposed calcs mising"
},
"highlight":{
"description":[
"GAP Sub-window conn ONe-e: heve PP-BE Defined ASST requirem RV confsng, des MAN <em>Imposed</em> <em>calcs</em> mising"
]
}
}
]
推荐阅读
- r - R:如何通过使用来自另一个行数较少的数据帧的信息来定位大型数据帧中的列
- restsharp - 强制 OAuth1 参数进入查询字符串?
- wolfram-mathematica - 如何将数字添加到 Wolfram mathematica 中的每个子集?
- svelte - 为什么这个反应变量在服务器端被触发两次?
- java - 在 Mirth 中创建 JWT 和解码/编码
- android - android,无法更改为 com.android.tools.build:gradle:4.2.1
- javascript - 当显示特定文本时,我需要隐藏一个元素
- android - 触摸/单击 ListView 中的项目时,有时会丢失按下状态
- python - 如何使用 selenium python 在 Edge 中将网页语言从英语更改为其他语言?
- elasticsearch - 在 Elasticsearch 中搜索可搜索字段