【发布时间】:2015-07-20 18:53:13
【问题描述】:
我在编写一个在 elasticsearch 中接受各种搜索参数的方法时遇到了麻烦。我正在处理看起来像这样的查询:
body:
{query:
{filtered:
{filter:
{and:
[
{term: {some_term: "foo"}},
{term: {is_visible: true}},
{term: {"term_two": "something"}}]
}
}
}
}
使用这种语法,我认为我可以将这些术语链接在一起并以编程方式生成这些查询。我使用的是简单的字符串,如果有像“person_name”这样的术语,我可以将查询分成两部分,然后说“person_name 匹配'JOHN'”和“person_name 匹配'SMITH'”得到准确的结果。
但是,我在问这个问题时遇到了“fquery”: Escaping slash in elasticsearch
我无法使用“and”/“term”过滤器搜索带有斜杠的值,所以我了解到我可以使用 fquery 来搜索完整值,就像这样
"fquery": {
"query": {
"match": {
"by_line": "John Smith"
但是我怎样才能像这样搜索多个项目呢? IT 似乎当我结合 fquery 和我的过滤/过滤/和/术语查询时,我的“和”术语查询被忽略了。使用弹性搜索进行嵌套/链接查询的最佳实践是什么?
正如下面的评论,是的,我可以像这样将 fquery 添加到“and”块中
{:filtered=>
{:filter=>
{:and=>[
{:term=>{:is_visible=>true}},
{:term=>{:is_private=>false}},
{:fquery=>
{:query=>{:match=>{:sub_location=>"New JErsey"}}}}]}}}
为什么 elasticsearch 也会返回“sub_location”=“new York”的结果?我只想在这里归还“新泽西”。
【问题讨论】:
-
您应该能够将查询过滤器作为过滤器包含在您的“and”过滤器中,就像您使用术语过滤器一样。
-
你是对的。我已经用后续问题更新了我的问题
标签: elasticsearch