【发布时间】:2018-09-16 09:45:50
【问题描述】:
根据文档
must_not子句(查询)不得出现在匹配的文档中。
我有这样的查询:
// searching for URI which contains smart and doesn't contain vip.vs.csin.cz
BoolQueryBuilder builder = QueryBuilders.boolQuery();
builder.must(QueryBuilders.termQuery(URI, "smart")));
builder.mustNot(QueryBuilders.termQuery(URI, "vip.vs.csin.cz")));
在我的 elasticsearch 存储库中有两个 URI
1)
/smart-int-vip.vs.csin.cz:5080/smart/api/runtime/case/SC0000000000558648/record/generate/4327/by/SMOBVA002/as/true?espisRecordForm=ANALOG&accountNumber=2318031033/0800
2)
/smart/api/runtime/case/SC0000000000558648/record/generate/4327/by/SMOBVA002/as/true?espisRecordForm=ANALOG&accountNumber=2318031033/0800
当我通过 ElasticSearchTemplate
执行查询时elasticsearchTemplate.getClient().search(searchRequest);
我返回 0 条记录。当我在没有 mustNot 子句的情况下执行相同的查询时,我会返回 2 条记录。
在 kibana 中我可以写:
uri: "smart" NOT uri: "vip.vs.csin.cz"
并按预期获得 1 条记录。
我期待来自 Java ElasticSearchClient 的相同行为。如何从 Java 中过滤包含“vip.vs.csin.cz”的记录以及为什么它过滤了第二条记录,即使它不包含我指定的 mustNot 子句中的任何内容?
在这里编辑我的映射
@Document(indexName = "audit-2018", type = "audit")
public class Trace {
@Id
private String id;
@Field(type = FieldType.Text)
private String uri;
// more columns, getter & setters
}
【问题讨论】:
-
如果您也分享索引的映射,我们将更加受益。
-
我添加了索引映射,谢谢
标签: java elasticsearch