我为某些字段设置了同义词,但是我希望将其应用于映射到not_analyzed的字段。
例如,我让字段foo存储seksyen 10,它是not_analyzed,并且为seksyen, section添加了一个同义词条目(处理文档中的混合语言)。
'foo': {'type': 'string', 'index': 'not_analyzed'}假设用户发出一个查询
{"term": {"foo": "section 10"}}并期待与seksyen 10和section 10一起使用foo。但是,使用当前的映射,我不能在给定查询的情况下返回seksyen 10。另外,我在这里执行过滤查询,因为我不希望返回这些查询
whatever seksyen 10
seksyen 10, something
whatever section 10 something我只希望将同义词扩展应用于查询,而不是在查询中指定它。我该怎么做呢?
发布于 2016-07-20 18:50:30
首先,使用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字段将不再可能。
https://stackoverflow.com/questions/38476721
复制相似问题