我有以下字段:
BoolQueryBuilder bqb = QueryBuilders
.boolQuery()
.must(QueryBuilders.termsQuery("country", "DK"));
bqb.filter(QueryBuilders.termsQuery("media", "book"));
bqb.filter(QueryBuilders.termsQuery("state", "inactive");
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(bqb)
.build();
从这个Stackoverflow问题中我可以理解的是:elasticsearch bool query Compose must with或者我应该创建如下所示的查询:
{
"query": {
"bool": {
"must": [
{
"term": {"country": "DK"}
},
{
"bool": {
"should": [
{
"bool": {
"must": [
{"term": {"media": "book"}},
{"term": {"state": "inactive"}}
]
}
},
{
"bool": {
"must": [
{"term": {"media": "ebook"}},
{"term": {"state": "active"}}
]
}
}
]
}
}
]
}
}
}
这是正确的吗?如何使用Java API实现这一点?
经过一些反复试验,这似乎奏效了:
BoolQueryBuilder bqb = QueryBuilders
.boolQuery()
.must(QueryBuilders.termsQuery("country", "DK"));
BoolQueryBuilder query1 = QueryBuilders.boolQuery();
query1.filter(QueryBuilders.termsQuery("media", "book"));
query1.filter(QueryBuilders.termsQuery("state", "inactive");
BoolQueryBuilder query2 = QueryBuilders.boolQuery();
query2.filter(QueryBuilders.termsQuery("media", "ebook"));
query2.filter(QueryBuilders.termsQuery("state", "active");
bqb.filter(QueryBuilders.boolQuery().should(query1).should(query2));
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(bqb)
.build();
它生成了以下查询:
{
"bool" : {
"must" : [
{
"terms" : {
"country" : [
"DK"
],
"boost" : 1.0
}
}
],
"filter" : [
{
"bool" : {
"should" : [
{
"bool" : {
"filter" : [
{
"terms" : {
"media" : [
"book"
],
"boost" : 1.0
}
},
{
"terms" : {
"state" : [
"inactive"
],
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
{
"bool" : {
"filter" : [
{
"terms" : {
"media" : [
"ebook"
],
"boost" : 1.0
}
},
{
"terms" : {
"state" : [
"active"
],
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
我看不到任何关于何时应该使用查询或过滤器或两者结合的描述。他们之间有什么区别?谁能解释一下吗?
好吧,这一个对你们中的一个超级棒的弹性搜索专家来说可能不会太难。我得到了这个嵌套查询,我希望嵌套查询在一个非嵌套字段(状态)上进行过滤。我不知道把过滤器放在哪里。我试着把它放在一个查询中(如下),但没有给出正确的结果。你能帮我吗?
问题内容: 我目前正在尝试将基于Solr的应用程序迁移到Elasticsearch。 我有这个lucene查询 据我了解,这是MUST子句与布尔OR的组合: “获取所有包含(名称中包含foo AND条)或(信息中包含foo AND条)的所有文档。在此之后,按条件state = 1过滤结果,并增强具有图像的文档。” 我一直在尝试将布尔查询与MUST一起使用,但是我无法将布尔OR放入must子句中。这
有没有一种方法可以在php中使用filter_var在值与正确的过滤器匹配时返回true,否则返回false? 我想得到的是: 非常感谢。
我目前正在尝试将一个基于Solr的应用程序迁移到ElasticSearch。 我有这个lucene查询 根据我的理解,这是一个必须子句与布尔OR结合的组合: “获取名称中包含(foo和bar)或信息中包含(foo和bar)的所有文档。之后,根据条件筛选结果state=1,并增强具有图像的文档。” 我一直试图在MUST中使用bool查询,但未能将boolean或转换为MUST子句。以下是我的资料:
将elasticsearch布尔查询与范围增强相结合 因此,我尝试添加一个增强,如下所示: 这会像我想要的那样对内容进行排序,但它也会返回与搜索项不匹配的单字匹配项。 有没有一种方法可以只增强单个单词的匹配,这些匹配也与搜索项匹配?我尝试降低值,当使用有效的(找到的)搜索项时,该值会破坏所需的排序。 似乎应该有一种方法可以使用bool进行整个