我试图在搜索中匹配"new york“(而不是包含"new”或"york“的地方)。
以下是我当前的查询:
"query" : {
"query_string" : {
"query" : "new york" ,
"fields" : ["city"]
}
},
"filter" : {
"and" : [{
"query" : {
"query_string" : {
"query" : "country:US"
}
}
}]
} 然而,这会使返回的地方名为"york“而不是"new york”。
我不是完全理解这是如何工作的,希望能得到一些帮助,让它真正为我工作。
发布于 2012-11-21 21:38:00
如果您希望这两个单词出现在同一文档中,则需要更改默认操作符,如下所示:
"query" : {
"query_string" : {
"query" : "new york" ,
"fields" : ["city"],
"default_operator" : "AND"
}
}或者在查询中指定它:
"query" : {
"query_string" : {
"query" : "new AND york" ,
"fields" : ["city"]
}
}请看一下query string文档。
否则,如果您希望这两个单词在同一文档中彼此靠近,则需要创建如下phrase query:
"query" : {
"match_phrase" : {
"message" : "new york"
}
}发布于 2016-03-21 20:37:16
默认情况下,由Elasticsearch分析的“城市”字段执行默认的单词标记化。
New York => *New*, *York*为了保持令牌的完整性(主要用于聚合),您需要使用多字段显式地使城市字段“未分析”
'city' => [
'type' => 'string',
'fields' => [
'raw' => [
'type' => 'string',
'index' => 'not_analyzed'
]
]
]现在,您可以使用city.raw来获取未分析的值。
https://stackoverflow.com/questions/13485799
复制相似问题