我希望与":Feed:"
字段中的字符串message
完全匹配,并返回所有此类记录。我的json似乎也匹配普通单词" feed "
。我不确定我哪里出错了。我是否需要将"constant_score"
添加到此查询JSON中?我目前的JSON如下所示:
{
"query": {
"bool": {
"must": {
"query_string": {
"fields": ["message"],
"query": "\\:Feed\\:"
}
},
"must": {
"range": {
"timestamp": {
"gte": "now-1d",
"lte": "now"
}
}
}
}
}
}
答案 0 :(得分:9)
如上所述:Finding Exact Values,因为在索引时已对字段进行了分析 - 您无法精确匹配其标记(":")。每当令牌都应该被搜索时,映射应该是" not_analyzed"并且数据需要重新编制索引。
如果您希望能够轻松匹配":Feed:"在消息字段中,您可能希望对没有标记化的分析器进行成本计算:":"这样你就可以用简单的#34;匹配"来查询字段。查询而不是通配符。
答案 1 :(得分:6)
无法通过query_string
来执行此操作,但是可以通过创建自定义规范化器,然后使用“ match”或“ term”查询来做到这一点。
以下步骤对我有用。
创建自定义规范化器(可用> V5.2)
"settings": {
"analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"filter": ["lowercase"]
}
}
}
}
使用“关键字”类型创建映射
{
"mappings": {
"default": {
"properties": {
"title": {
"type": "text",
"fields": {
"normalize": {
"type": "keyword",
"normalizer": "my_normalizer"
},
"keyword" : {
"type": "keyword"
}
}
}
}
}
}
使用匹配项或术语查询
{
"query": {
"bool": {
"must": [
{
"match": {
"title.normalize": "string to match"
}
}
]
}
}
}