gpt4 book ai didi

elasticsearch - Elasticsearch 与字段中的空间最匹配

转载 作者:行者123 更新时间:2023-12-02 23:08:17 24 4
gpt4 key购买 nike

我在elasticsearch字段中有包含“face mask” 的数据,我可以通过以下查询将search_term设置为“face”,“face mask”,“mask”和“face masks”来获取此数据。

{
"query": {
"bool": {
"must": [{
"multi_match": {
"query": ${search_term},
"fields": [
"title^4",
"titleNgram^3",
],
"fuzziness": "auto"
}
}]
}
}
}
我无法实现的是,当我查询 “facemask” (search_term中没有空格)时,它不返回任何包含 “face” “mask” 的文档,但是返回包含以下字段的文档 “洗脸” 。有办法实现吗?
映射在下面共享
{
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text"
},
"titleNgram": {
"search_analyzer": "whitespace_analyzer",
"analyzer": "nGram_analyzer",
"type": "text"
},
"id": {
"index": false,
"type": "text"
}
}
}
}
}

最佳答案

您可以尝试删除 "search_analyzer": "whitespace_analyzer",并为数据重新编制索引,并使用相同的查询,它应该返回预期的结果。

{
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text"
},
"titleNgram": {
"search_analyzer": "whitespace_analyzer", --> remove this line.
"analyzer": "nGram_analyzer",
"type": "text"
},
"id": {
"index": false,
"type": "text"
}
}
}
}
}
编辑:我在本地进行了测试,并且对我有用,下面是我使用的示例
搜索查询
{
"query": {
"multi_match": {
"query": "face mask",
"fields": [
"titlengram",
"title"
]
}
}
}


,它提供了您期望的文档
 "hits": [
{
"_index": "ngram",
"_type": "_doc",
"_id": "1",
"_score": 2.3014567,
"_source": {
"title": "face mask",
"titlengram": "face mask"
}
}

关于elasticsearch - Elasticsearch 与字段中的空间最匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63034623/

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