0

我最近开始使用 ElasticSearch。我已经成功地集成了它们,但我发现搜索 API 相当复杂和令人困惑。Java API 也不是很有帮助。title如何使用 Lucene 语法ANDORjava api在以下 JSON 中搜索字段名?

{
    "queryId": 2,
    "queryName": "beta",
        "query": {
            "lang": "en",
            "location": "pa",
            "title": "americanlegion OR concernedvets AND conversion"
      }
  }

我试过boolean query了,但他们没有满足我的目的。

4

1 回答 1

2

如果你能展示你尝试过的东西BoolQuery并解释为什么它不起作用,那就太好了。这是一个使用 Java API 的查询示例BoolQuery

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.should(QueryBuilders.termsQuery("lang", "en"));
boolQuery.should(QueryBuilders.termsQuery("location", "en"));

BoolQueryBuilder titleBoolQuery = QueryBuilders.boolQuery();
titleBoolQuery.should(QueryBuilders.termsQuery("title", new String[]{"americanlegion", "conversion"}));
titleBoolQuery.must(QueryBuilders.termQuery("title", "conversion"));

boolQuery.should(titleBoolQuery);

生成的 JSON:

{
    "bool" : {
        "should" : [ {
            "terms" : {
                "lang" : [ "en" ]
            }
        },{
            "terms" : {
                "location" : [ "pa" ]
            }
        },{
            "bool" : {
                "must" : {
                    "term" : {
                         "title" : "conversion"
                    }
                },
                "should" : {
                    "terms" : {
                        "title" : [ "americanlegion", "conversion" ]
                     }
                }
            }
       } ]
   }
}

编辑

如果要使用 Lucene 语法,请使用QueryStringQueryBuilder

QueryStringQueryBuilder query = QueryBuilders.queryString("user.name:\"John\" OR user.name:\"Matt\"");

这将产生 JSON

{
    "query_string" : {
        "query" : "user.name:\"John\" OR user.name:\"Matt\""
    }
}
于 2014-08-22T20:58:02.820 回答