我正在编写一个Java应用程序,并使用 flex 搜索作为数据库。
我正在寻找一种编写“不包含”查询的方法。
例如,我有一个带有值的字段类别:
现在,我要获取所有类别中不包含“快速”的条目。
如何建立这样的查询?
我一直在这里看,但找不到任何东西。
提前致谢
因此,感谢@James和@Bhavya Gupta,我可以更新查询,但无法正常工作。
我的查询现在是:
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"bool": {
"must_not": [
{
"term": {
"BetriebsID": "Aufzug"
}
} ]
}
}
}
}
但是结果仍然包含以下匹配:"hits": [
"_source": {
...
"FormNo": 9150520000000692,
"CreatedTime": "2020-05-15T08:19:03.000Z",
"templateId": "Aufzugsstoerung",
"SYS_FORM_ID": "150520_000000692",
"trecId": 151,
"BetriebsID": "20200515_1019_Aufzugsstoerung",
"displayName": "Aufzugsstörung",
...
}
}]
我也使用James的通配符查询进行了尝试,结果相同。
最佳答案
您可以使用带有must_not
的 bool(boolean) 查询。 Kibana查询如下所示:
GET my_index/_search
{
"query": {
"bool": {
"must_not": [
{
"wildcard": {
"category": {
"value": "fast*"
}
}
}
]
}
}
}
示例Java代码: SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
.query(QueryBuilders.boolQuery().mustNot(QueryBuilders.wildcardQuery("category", "fast*")));
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.source(searchSourceBuilder);
SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
关于java - ElasticSearch查询不包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64009221/