gpt4 book ai didi

elasticsearch - Elasticsearch 中的带状疱疹,为什么这个带有自定义分析器的示例会失败?

转载 作者:行者123 更新时间:2023-11-29 02:46:04 27 4
gpt4 key购买 nike

我将我的问题改写为一个完整的 curl 娱乐脚本。这样可能更容易重现问题(使用自定义分析器搜索失败)。我为此使用最新的 ES 版本

删除旧数据

curl -XDELETE "http://localhost:9200/test_shingling"

使用设置创建索引

curl -XPOST "http://localhost:9200/test_shingling/" -d '{
"settings": {
"index": {
"number_of_shards": 10,
"number_of_replicas": 1
},
"analysis": {
"analyzer": {
"ShingleAnalyzer": {
"tokenizer": "BreadcrumbPatternAnalyzer",
"filter": [
"standard",
"lowercase",
"filter_stemmer",
"filter_shingle"
]
}
},
"filter": {
"filter_shingle": {
"type": "shingle",
"max_shingle_size": 2,
"min_shingle_size": 2,
"output_unigrams": false
},
"filter_stemmer": {
"type": "porter_stem",
"language": "English"
}
},
"tokenizer": {
"BreadcrumbPatternAnalyzer": {
"type": "pattern",
"pattern": " |\\$\\$\\$"
}
}
}
}
}'

定义映射

curl -XPOST "http://localhost:9200/test_shingling/item/_mapping" -d '{
"item": {
"properties": {
"Title": {
"type": "string",
"search_analyzer": "ShingleAnalyzer",
"index_analyzer": "ShingleAnalyzer"
}
}
}
}'

创建文档

curl -XPOST "http://localhost:9200/test_shingling/item/" -d '{
"Title":"Kyocera Solar Panel Test"
}'

测试分析仪通过

curl 'localhost:9200/test_shingling/_analyze?pretty=1&analyzer=ShingleAnalyzer' -d 'Kyocera Solar Panel Test'

等待 ES 同步(也就是刷新索引)

curl -XPOST "http://localhost:9200/test_shingling/_refresh"

搜索“Kyocera Solar Panel Test”失败

curl -XPOST "http://localhost:9200/test_shingling/item/_search?pretty=true" -d '{
"query": {
"term": {
"Title": "Kyocera Solar Panel Test"
}
}
}'

搜索“太阳能电池板”失败

curl -XPOST "http://localhost:9200/test_shingling/item/_search?pretty=true" -d '{
"query": {
"term": {
"Title": "Kyocera Solar Panel Test"
}
}
}'

搜索“Kyocera Solar Panel Test”失败

curl -XPOST "http://localhost:9200/test_shingling/item/_search?pretty=true" -d '{
"query": {
"query_string": {
"default_field": "Title",
"query": "Kyocera Solar Panel Test"
}
}
}'

搜索“太阳能电池板”失败

curl -XPOST "http://localhost:9200/test_shingling/item/_search?pretty=true" -d '{
"query": {
"query_string": {
"default_field": "Title",
"query": "solar panel"
}
}
}'

最佳答案

术语查询将搜索完全匹配项,并且不会将 ShingleAnalyzer 应用于您的查询。

因此您必须使用匹配查询,这将在搜索时将分析器应用于您的查询字符串。

全词搜索

curl -XPOST "http://localhost:9200/test_shingling/item/_search" -d'{
"query": {
"match": {
"Title": "Kyocera Solar Panel Test"
}
}
}'

部分词搜索

curl -XPOST "http://localhost:9200/test_shingling/item/_search" -d'{
"query": {
"match": {
"Title": "Panel Test"
}
}
}'

另一种分词搜索

curl -XPOST "http://localhost:9200/test_shingling/item/_search" -d'{
"query": {
"match": {
"Title": "Solar Panel Test"
}
}
}'

希望对您有所帮助...!

关于elasticsearch - Elasticsearch 中的带状疱疹,为什么这个带有自定义分析器的示例会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23295896/

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