gpt4 book ai didi

elasticsearch - Elasticsearch 中的相对词匹配

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

flex 搜索的新功能,以下是我要实现的目标,其中与查询字符串相对匹配的任何事物都应返回结果

创建如下所示的样本索引

curl -XPUT 'http://localhost:9200/prj1/mod/java' -d '{
"project_name": "Java_SE"
}'

curl -XPUT 'http://localhost:9200/prj1/mod/java2Ed' -d '{
"project_name": "Java 2 Edition"
}'

curl -XPUT 'http://localhost:9200/prj1/mod/javaee' -d '{
"project_name": "Java_EE"
}'

搜索时
curl -XGET 'http://localhost:9200/prj1/mod/_search' -d '{"query" : {"match" : {"project_name" : "Java"}}}'

返回低于结果
{"took":6,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.15342641,"hits":[{"_index":"prj1","_type":"mod","_id":"java2Ed","_score":0.15342641,"_source":{
"project_name": "Java 2 Edition"
}}]}}

它不会返回名称为“Java_SE”,“Java 2 Edition”和“Java_EE”的所有项目。

需要使用匹配文本“example”将所有内容保存到找到的位置
我的文字中也可能有这样的数据

这是一个example_code
这个例子:11好
您要查找的示例不可用。

我在这里做错了什么。

最佳答案

您需要使用edge ngram过滤器来解决此问题。通过以下设置创建索引

PUT prj1
{
"settings": {
"analysis": {
"filter": {
"ngram_filter": {
"type": "edgeNGram",
"min_gram": 2,
"max_gram": 8
}
},
"analyzer": {
"relative": {
"tokenizer": "standard",
"filter": [
"lowercase",
"ngram_filter"
]
}
}
}
},
"mappings": {
"mod": {
"properties": {
"project_name": {
"type": "string",
"analyzer": "relative",
"search_analyzer": "standard"
}
}
}
}
}

因此java_se将具有标记ja,jav java等,并且您的 match query将起作用。

多亏@sean,您需要对complete_java_book,my_java_applet等单词使用 ngram filter。如果您使用 _作为项目名称的命名约定,则可能要考虑在 _上打断单词,是吗?

希望这可以帮助。

关于elasticsearch - Elasticsearch 中的相对词匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35180108/

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