elasticsearch,Lucene,elasticsearch" /> elasticsearch,Lucene,elasticsearch" />

Lucene 在弹性搜索中查找具有特殊字符的子串

Lucene 在弹性搜索中查找具有特殊字符的子串,lucene,elasticsearch,Lucene,elasticsearch,我不熟悉弹性搜索。我想按子字符串搜索,它由数字和“/”和“-”等符号组成。例如,我使用默认设置和一个索引字段创建索引: curl -XPUT "http://localhost:9200/test/" -d ' { "mappings" : { "properties": { "test_field": { "type": "string"

我不熟悉弹性搜索。我想按子字符串搜索,它由数字和“/”和“-”等符号组成。例如,我使用默认设置和一个索引字段创建索引:

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过滤器,但它不适合搜索引擎的要求

如果有人遇到此问题,请回答。

默认设置将在索引时从数据中删除所有特殊字符。您可以使用,也可以不在索引时分析数据:

curl -XPUT "http://localhost:9200/test/" -d ' {
    "mappings" : {
            "properties": {
                    "test_field": {
                            "type": "string",
                            "index": "not_analyzed"
                    }
            }
    }
} '

我试过你的地图,几乎一切都很好。但并非全部。我必须在“测试字段”中输入以下值:“16/31-216”和“15/31-2”。当我搜索“31”时,两者都返回。但当我搜索“31-2”时,只有“15/31-2”返回=(请尝试查看您的数据是如何标记/过滤的。如果您想进行部分匹配,请很好地解释可能的情况(包括prefixQuery与Edge nGrams).在了解了一点ES的工作原理后,我找到了解决方案:我需要
关键字
标记器,带有
小写
NGram
过滤器,用于
索引分析器
关键字
标记器,用于
搜索分析器
。谢谢您的帮助!