我想精确匹配message
字段中的字符串":Feed:"
,然后返回一天,拉取所有这样的记录。我的json似乎也匹配普通单词" feed "
。我不确定我哪里出错了。我是否需要将"constant_score"
添加到这个查询JSON中?我目前拥有的JSON如下所示:
{
"query": {
"bool": {
"must": {
"query_string": {
"fields": ["message"],
"query": "\\:Feed\\:"
}
},
"must": {
"range": {
"timestamp": {
"gte": "now-1d",
"lte": "now"
}
}
}
}
}
}
4条答案
按热度按时间svmlkihl1#
如下所述:Finding Exact Values,因为字段在索引时已被分析-您无法精确匹配其标记(“:“)。只要标记应该是可搜索的,Map就应该是“not_analyzed”,并且数据需要重新索引。
如果您希望能够轻松地只匹配消息字段中的“:feed:“,那么您可能需要定制一个不会标记“:“的分析器,这样您就能够使用简单的“match”查询而不是通配符来查询字段。
siotufzp2#
在
query_string
中无法做到这一点,但通过创建一个自定义规范化器,然后使用“match”或“term”查询可以做到这一点。以下步骤对我很有效。
1.创建一个自定义规范器(可用〉V5.2)
}
1.创建类型为“keyword”的Map
1.使用匹配或术语查询
kdfy810k3#
使用匹配短语
在Java中使用QueryBuilder中的匹配短语查询
sycxhyv74#
term
查询..term
查询而不是match_phrase
,match_phrase
此查找/匹配与ES文档存储的句子,它不会完全匹配。它与那些句子单词匹配!