gpt4 book ai didi

elasticsearch - 如何在 Elasticsearch 中将术语与空格匹配?

转载 作者:行者123 更新时间:2023-11-29 02:56:17 25 4
gpt4 key购买 nike

我有一个在 elasticsearch 中索引的内容字段(字符串)。分析器是默认的 - 标准分析器。

当我使用匹配查询进行搜索时:

{"query":{"match":{"content":"micro soft", "operator":"and"}}}

结果显示无法匹配“microsoft”。

那如何使用输入关键字“micro soft”来匹配包含“microsoft”的文档内容呢?

最佳答案

另一种解决方法是使用 nGram token 过滤器,这将允许您进行更“模糊”的匹配。

使用您的“microsoft”和“micro soft”示例,下面是一个示例ngram 标记过滤器会分解标记:

POST /test
{
"settings": {
"analysis": {
"filter": {
"my_ngrams": {
"type": "ngram",
"min_gram": "3",
"max_gram": "5"
}
},
"analyzer" : {
"my_analyzer" : {
"type" : "custom",
"tokenizer" : "standard",
"filter": ["my_ngrams"]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"body": {
"type": "string",
"analyzer": "my_analyzer"
}
}
}
}
}

并分析两件事:

curl '0:9200/test/_analyze?field=body&pretty' -d'microsoft'
{
"tokens" : [ {
"token" : "mic"
}, {
"token" : "micr"
}, {
"token" : "micro"
}, {
"token" : "icr"
}, {
"token" : "icro"
}, {
"token" : "icros"
}, {
"token" : "cro"
}, {
"token" : "cros"
}, {
"token" : "croso"
}, {
"token" : "ros"
}, {
"token" : "roso"
}, {
"token" : "rosof"
}, {
"token" : "oso"
}, {
"token" : "osof"
}, {
"token" : "osoft"
}, {
"token" : "sof"
}, {
"token" : "soft"
}, {
"token" : "oft"
} ]
}

curl '0:9200/test/_analyze?field=body&pretty' -d'micro soft'
{
"tokens" : [ {
"token" : "mic"
}, {
"token" : "micr"
}, {
"token" : "micro"
}, {
"token" : "icr"
}, {
"token" : "icro"
}, {
"token" : "cro"
}, {
"token" : "sof"
}, {
"token" : "soft"
}, {
"token" : "oft"
} ]
}

(我截取了部分输出,这里完整输出: https://gist.github.com/dakrone/10abb4a0cfe8ce8636ad )

如您所见,由于“microsoft”和“micro soft”的 ngram 术语重叠,您将能够为这样的搜索找到匹配项。

关于elasticsearch - 如何在 Elasticsearch 中将术语与空格匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29693180/

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