我最近开始使用ElasticSearch。我成功地将它们集成在一起,但我发现搜索API相当复杂和令人困惑。 Java API也没有太大帮助。如何使用java api使用Lucene语法title
和AND
搜索以下JSON中的字段名OR
?
{
"queryId": 2,
"queryName": "beta",
"query": {
"lang": "en",
"location": "pa",
"title": "americanlegion OR concernedvets AND conversion"
}
}
我已经尝试boolean query
,但他们不能满足我的目的。
答案 0 :(得分: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\""
}
}