gpt4 book ai didi

elasticsearch - 使用Elasticsearch中的同义词查找精确值

转载 作者:行者123 更新时间:2023-12-03 01:53:27 24 4
gpt4 key购买 nike

我为某些字段设置了同义词,但是我希望将其应用于我映射到not_analyzed的字段。

例如,我有一个字段foo存储seksyen 10,它是not_analyzed,并且为seksyen, section添加了一个同义词条目(处理文档中的混合语言)。

'foo': {'type': 'string', 'index': 'not_analyzed'}

假设用户发出查询
{"term": {"foo": "section 10"}}

并期望 fooseksyen 10section 10。但是,使用当前映射,我无法在给定查询的情况下返回 seksyen 10。我也在这里做一个过滤查询,因为我不希望这些返回
whatever seksyen 10
seksyen 10, something
whatever section 10 something

我只希望将同义词扩展应用于查询,而无需在查询中指定。我该怎么办?

最佳答案

首先,使用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_analyzernot_analyzed字段将不再可用。

关于elasticsearch - 使用Elasticsearch中的同义词查找精确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38476721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com