我把我的问题重新写成了一个完整的卷曲娱乐剧本。这样可能更容易再现问题(自定义分析器搜索失败)。我使用的是最新的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"搜索“京瓷太阳能电池板测试”失败
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"
}
}
}'搜索“京瓷太阳能电池板测试”失败
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"
}
}
}'发布于 2014-04-28 07:04:03
术语查询将搜索完全匹配的内容,而不会将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"
}
}
}'希望能帮上忙!
发布于 2014-04-27 16:18:56
我认为搜索query_string默认认为solar panel是solar或panel,您必须在query_string中显式地设置它。这就是参考指南中所写的内容。
default_operator: 如果未指定显式运算符,则使用默认运算符。例如,对于OR的默认运算符,匈牙利的查询首都被转换为OR匈牙利的大写或,而对于默认的运算符AND,同样的查询被转换为same和of和匈牙利。默认值是OR。
https://stackoverflow.com/questions/23295896
复制相似问题