这是我用于获取 id 的 Elasticsearch 查询
curl -XGET localhost:9200/test-index2/business/_search -d'
{
"query" : {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"term" : {
"_id" : "AU6LqK0WCSY7HKQGengx"
}
}
}
}
}'
这是响应的一部分
{"contactNumber": "+1-415-392-3702", "name": "Golden Gate Hotel"}
我有联系人号码和姓名
现在是我的第二个查询 -> 我正在使用术语过滤器查询上述联系电话
curl -XGET localhost:9200/test-index2/business/_search -d'
{
"query" : {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"term" : {
"contactNumber" : "+1-415-392-3702"
}
}
}
}
}'
我有0次点击!
我已对 contactNumber 和 name 字段建立了索引。
我做错了什么?
我应该得到完全相同的记录
编辑:
附上联系电话的映射
{"test-index2":{"mappings":{"business":{"properties":{"address":{"type":"string"},"contactNumber":{"type":"string","store":true},"name":{"type":"string"}}}}}}
最佳答案
term
过滤器不会分析输入文本,这意味着如果您搜索“+1-415-392-3702”,那么这就是它期望在索引中找到的确切文本。
但是,您的字段只是默认的字符串
,这意味着它很可能使用标准
分析器来分析它。这意味着在索引中您将拥有以下标记:"1","3702","392","415"
而不是单个 +1-415-392-3702
.
因此,您需要以下两者之一:
"contactNumber": {
"type": "string",
"index": "not_analyzed",
"store":true
}
或
"contactNumber": {
"type": "string",
"analyzer": "keyword",
"store":true
}
关于json - Elasticsearch 词过滤器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428891/