我是弹性搜索的新手。我想按子字符串搜索,它由数字和符号(如“/”和“-”)组成。例如,我使用默认设置和一个索引字段创建一个索引:
curl -XPUT "http://localhost:9200/test/" -d ' {
"mappings" : {
"properties": {
"test_field": {
"type": "string"
}
}
}
} '
然后,我将一些数据添加到我的索引中:
curl -XPOST "http://localhost:9200/test/test_field" -d '{ "test_field" : "14/21-35" }'
curl -XPOST "http://localhost:9200/test/test_field" -d '{ "test_field" : "1/1-35" }'
curl -XPOST "http://localhost:9200/test/test_field" -d '{ "test_field" : "1/2-25" }'
刷新索引后,我执行搜索。所以,我想找到“test_field”以“1/1”开头的数据。我的请求:
curl -X GET "http://localhost:9200/test/_search?pretty=true" -d '{"query":{"query_string":{"query":"1/1*"}}}'
不返回任何命中。如果我删除星号,那么作为回应,我会看到两个点击:“1/1-35”和“1/2-25”。如果我尝试通过反斜杠(“1\/1*”)转义斜杠符号,结果分别相同。
当我的查询中有“-”符号时,我必须转义这个 Lucene 特殊字符。所以我发送下一个搜索请求:
curl -X GET "http://localhost:9200/test/_search?pretty=true" -d '{"query":{"query_string":{"query":"*1\-3*"}}}'
它返回解析错误。如果我双转义(“\\”)减号,那么我没有结果。
当查询包含这些字符时,我不知道搜索的执行方式。也许我做错了什么。
我尝试在我的自定义分析器中使用nGram过滤器,但它不适合搜索引擎的要求。
如果有人遇到这个问题,请回答。