我将我的问题改为完整的卷曲娱乐脚本。这样可以更容易地重现问题(使用自定义分析器搜索失败)。我正在使用最新的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'
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"
}
}
}'
答案 0 :(得分:5)
术语查询将搜索完全匹配,并且不会将ShingleAnalyzer应用于您的查询。
因此您必须使用匹配查询,这将在搜索时将Analyzer应用于您的查询字符串。
全字搜索
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"
}
}
}'
希望它有帮助..!
答案 1 :(得分:1)
我认为搜索query_string
默认将solar panel
视为solar
或panel
,您必须在query_string
中明确设置。这就是reference guide中的内容。
default_operator:
如果未指定显式运算符,则使用默认运算符。例如,使用OR的默认运算符,匈牙利的查询资本将转换为OR匈牙利的资本OR,并且使用AND的默认运算符,相同的查询将转换为AND匈牙利的资本AND。默认值为OR。