我为某些字段设置了同义词,但我希望将其应用于我映射到not_analyzed
的字段。
例如,我有foo
字段存储seksyen 10
not_analyzed
,并为seksyen, section
添加同义词条目(处理文档中的混合语言)。< / p>
'foo': {'type': 'string', 'index': 'not_analyzed'}
假设用户发出查询
{"term": {"foo": "section 10"}}
并期待foo
和seksyen 10
以及section 10
。但是,对于当前映射,我无法在给定查询的情况下返回seksyen 10
。此外,我在这里进行过滤查询,因为我不希望这些被退回
whatever seksyen 10
seksyen 10, something
whatever section 10 something
我只想将同义词扩展应用于查询,而不在查询中指定。我该怎么做?
答案 0 :(得分:1)
首先,使用term
不会对搜索到的文本进行任何分析,因此您需要不同类型的查询。
您可以执行以下操作:
{
"mappings": {
"test": {
"properties": {
"foo": {
"type": "string",
"index": "not_analyzed",
"search_analyzer": "synonym"
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"synonym": {
"tokenizer": "whitespace",
"filter": [
"synonym"
]
}
},
"filter": {
"synonym": {
"type": "synonym",
"synonyms": [
"seksyen, section"
]
}
}
}
}
}
因此,您只能在搜索时定义search_analyzer
。然后你需要放弃term
过滤器,否则它将无效:
{
"query": {
"match": {
"foo": "section"
}
}
}
上述解决方案适用于ES 1.x.在ES 2.x中,search_analyzer
和not_analyzed
字段将不再可能。