映射包含嵌套字段。
我想知道是否有可能在不将其类型更改为“ keyword”的情况下对“ value”进行完全匹配。
"mappings": {
"properties": {
"tag": {
"type": "nested",
"properties": {
"value": {
"type": "text"
},
"key": {
"type": "keyword"
}
}
}
}
}
以下是我尝试对“值”字段进行完全匹配的代码。
BoolQueryBuilder boolQ = boolQuery();
boolQ.must(matchQuery("tag.key", "key"));
boolQ.must(matchQuery("tag.value", "value").fuzziness(Fuzziness.ZERO));
entireQuery.must(nestedQuery("tag", boolQ, ScoreMode.None));
上面的返回结果也与“ value”的标记词匹配。
如果存在与该问题有关的任何参考文献,我将不胜感激。
由于tag.value
类型为text
,因此已对其内容进行了分析,并且已在Elasticsearch中对生成的标记(即不完全值)进行了索引。
即使term
查询没有分析搜索令牌,它也没有用,因为已对索引令牌进行了分析。
现在有两个选项:
答:如果tag.value
只包含一个令牌(例如"Dog"
),你仍然可以准确地通过使用符合他们term
还是match
而是由lowercasing的值,如:
{
"nested": {
"path": "tag",
"query":{
"term":{
"tag.value":"dog"
}
}
}
}
B.如果tag.value
包含多个标记(例如"the big dog"
),则无法再搜索其确切值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句