elasticsearch - 如何在搜索查询中编写条件?
问题描述
我正在搜索特定地区的文件。文档具有各种状态。目的是返回所有文档,除非文档的状态码是ABCD
- 只有当它们的 ID 大于 100 时才应返回此类文档。我尝试编写多个查询,包括下面的查询,它只返回ABCD
ID 大于的文档100,没有其他文件。这里有什么问题?我怎样才能得到非 ABCD 文件呢?
"_source": true,
"from": 0,
"size": 50,
"sort": [
{
"firstStamp": "DESC"
}
],
"query": {
"bool": {
"must": [
{
"term": {
"districtId": "3755"
}
},
{
"bool": {
"must": [
{
"terms": {
"documentStatus.code.keyword": [
"ABCD"
]
}
},
{
"bool": {
"must": {
"script": {
"script": "doc['id'].value > 100"
}
}
}
}
]
}
}
]
}
}
}```
解决方案
由于您没有添加任何索引映射,因此查看您的搜索查询数据似乎是object field data type。据我了解,您的目标是返回所有文档,除非文档的状态码为
ABCD
并且ABCD
只有当其 ID 大于 100 时才应返回具有状态码的文档。
添加带有索引数据、搜索查询和搜索结果的工作示例
指数数据:
{
"id":200,
"documentStatus":{
"code":"DEF"
}
}
{
"id":200,
"documentStatus":{
"code":"ABCD"
}
}
{
"id":100,
"documentStatus":{
"code":"ABCD"
}
}
搜索查询:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"documentStatus.code.keyword": [
"ABCD"
]
}
},
{
"bool": {
"must": {
"script": {
"script": "doc['id'].value > 100"
}
}
}
}
]
}
},
{
"bool": {
"must_not": {
"terms": {
"documentStatus.code.keyword": [
"ABCD"
]
}
}
}
}
]
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64351595",
"_type": "_doc",
"_id": "2",
"_score": 2.0,
"_source": {
"id": 200,
"documentStatus": {
"code": "ABCD"
}
}
},
{
"_index": "stof_64351595",
"_type": "_doc",
"_id": "3",
"_score": 0.0,
"_source": {
"id": 200,
"documentStatus": {
"code": "DEF"
}
}
}
]
推荐阅读
- sql - 如何从表中查找缺失值
- python - 地址范围的最小值、最大值和步长
- python - alpha 和 beta 大于 1 的指数平滑
- image - 容器内的码头工人不再工作
- python-3.x - 代码未编译 - 无法找出问题
- javascript - Visual Studio 显示错误
- apache - 为什么 htaccess 出现错误,但将所有内容放入新文件夹后一切正常
- python - 想要在 python 中使用 .replace() 函数时用 HTML ul 标签替换 $
- firebase - Flutter Firebase远程配置类.../FirebaseRemoteConfigSettings中没有虚拟方法isDeveloperModeEnabled()Z
- vue.js - Vue.js 需要隐藏不存在的值