elasticsearch,elastic-stack,Java,elasticsearch,Elastic Stack" /> elasticsearch,elastic-stack,Java,elasticsearch,Elastic Stack" />

ElasticSearch Java API多重筛选器工作不正常

ElasticSearch Java API多重筛选器工作不正常,java,elasticsearch,elastic-stack,Java,elasticsearch,Elastic Stack,我已经为我的Oracle表编制了索引,我正在尝试使用过滤器进行查询 我的Oracle表: id code Attr_Label locale Value 1002 TE-7002 description en_US temperature valve 1002 TE-7002 description en_ES temperature v

我已经为我的Oracle表编制了索引,我正在尝试使用过滤器进行查询

我的Oracle表:

id      code        Attr_Label          locale          Value
1002    TE-7002     description         en_US           temperature valve
1002    TE-7002     description         en_ES           temperature valve
1002    TE-7002     Longdescription     en_US           High Temperture Valve
1002    TE-7002     Longdescription     en_ES           High Temperture Valve
1002    TE-7002     description         en_EU           High Temperture Valve tube
从这个表中,我使用
code:TE-7002
locale:en_-US
进行查询,我希望输出为
description
值和
Longdescription
值(应该是
en_-US
locale)

我正在尝试使用多过滤器API,但它不能正常工作

input query : `code : TE-7002` & `locale : en_US` 
我期望输出如下:

code : TE-7002
long_description : High Temperture Valve
description : temperature valve
请查找我的Java API代码:

QueryBuilder qb = QueryBuilders.boolQuery()
    .must(QueryBuilders.matchQuery("code", code))
    .filter(QueryBuilders.termQuery("locale", "en_US"))
    .filter(QueryBuilders.termQuery("attr_label", "long_description"))
    .filter(QueryBuilders.termQuery("attr_label", "description"));
对于上面的查询,我得到的是空的(没有结果)

但如果我的问题如下:

QueryBuilder qb = QueryBuilders.boolQuery()
    .filter(QueryBuilders.termQuery("attr_label", "long_description"))
我得到的结果不满足
locale:en_US
条件,例如:

code : TE-7002
long_description : HighTemperature Valve
请查找我的映射详细信息:

PUT products
{
"settings": {
"analysis": {
  "analyzer": {
    "custom_analyzer": {
      "type": "custom",
      "tokenizer": "whitespace",
      "char_filter": [
        "html_strip"
      ],
      "filter": [
        "lowercase",
        "asciifolding"
      ]
    }
   }
  }
},
"mappings": {
"doc": {
  "properties": {
    "code": {
      "type": "text",
       "analyzer": "custom_analyzer"
      },
    "id": {
        "type": "long"
      },
     "attr_label":{
     "type":"text"
     },
     "locale":{
     "type":"text"
     },
     "value":{
     "type":"text"
     }

    }
  }
 }
}
更新

我可以使用
过滤器
对多个值进行过滤。修改后的工作代码为:

QueryBuilder qb = QueryBuilders.boolQuery()
         .must(QueryBuilders.matchQuery("code", code))
         .filter(QueryBuilders.termsQuery("attr_label", "long_description", "description"));
它给了我预期的结果

现在,我必须在它上面再添加一个条件(过滤器)

我已经对它进行了多次测试,只有
locale
过滤器不起作用。其余的过滤器工作正常

QueryBuilder qb = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("code", code))
.filter(QueryBuilders.termQuery("locale", "en_US"))
.filter(QueryBuilders.termQuery("attr_label", "long_description"))
.filter(QueryBuilders.termQuery("attr_label", "description"));
您必须将此处使用的术语查询包装为单个boolQuery,并将其用作过滤器。大致是这样的:

QueryBuilder filters=QueryBuilders.boolQuery();
//add your filters here

    QueryBuilder qb = QueryBuilders.boolQuery()
    .must(QueryBuilders.matchQuery("code", code))
    .filter(fitlers);

您的查询结果是什么?@briarheart-我已在question@Karthikeyan请共享映射。@Richa-我已经更新了映射的详细信息。@Karthikeyan我认为是'locale'类型的issuesIts给出了空(null)结果。`QueryBuilder filters=QueryBuilders.boolQuery().filter(QueryBuilders.termQuery(“locale”,“en_US”)).filter(QueryBuilders.termQuery(“attr_标签”,“long_描述”))).filter(QueryBuilders.termQuery(“attr_标签”,“description”));QueryBuilder qb=QueryBuilders.boolQuery().must(QueryBuilders.matchQuery(“code”,code)).filter(filters)`只有
locale
过滤器不工作,其余工作正常。
QueryBuilder filters=QueryBuilders.boolQuery();
//add your filters here

    QueryBuilder qb = QueryBuilders.boolQuery()
    .must(QueryBuilders.matchQuery("code", code))
    .filter(fitlers);