首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何过滤出复杂查询中的文本字段?

如何过滤出复杂查询中的文本字段?
EN

Stack Overflow用户
提问于 2019-11-27 15:02:13
回答 1查看 43关注 0票数 0

我的UI上有很多文档过滤器(日期范围、复选框、输入字段),所以查询是动态生成的--这就是为什么我决定创建一个布尔查询,并将所有内容推送到must数组。下面是我的请求示例:

代码语言:javascript
复制
const {
    body: {
      hits
    }
  } = await esclient.search({
    from: filterQuery.page || 0,
    size: filterQuery.limit || 1000,
    index,
    body: query
  });

复选框(我在must数组中使用了额外的bool.should )和日期范围可以很好地工作,但术语/匹配过滤根本不起作用:

代码语言:javascript
复制
{
  "query": {
    "bool": {
      "must": [
          {"match": { "issueNumber": "TEST-10" }}
        ]
    }  
  }
} 

上面的查询给出了包含"TEST“的索引中的所有文档(以及它们的分数),如果我将match更改为term,它将返回一个空数组。

因为我的字段类型是'text',所以我也尝试了filter查询- ES仍然给出了所有带有'TEST‘单词的文档:

代码语言:javascript
复制
{
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "filter": {
              "match": {"issueNumber": "TEST-10"}
            }
          }
        }
      ]
    }
  }
} 

我的点击率是这样的:

代码语言:javascript
复制
       {
        "_index" : "test_elastic",
        "_type" : "_doc",
        "_id" : "bj213hj2gghg213",
        "_score" : 0.0,
        "_source" : {
          "date" : "2019-11-26T13:27:01.586Z",
          "country" : "US",
          "issueNumber" : "TEST-10",
        }

有人能告诉我如何在复杂查询中正确过滤文档吗?

这是我的索引的结构:

代码语言:javascript
复制
{
  "test_elasticsearch" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "country" : {
          "type" : "text"
        },
        "date" : {
          "type" : "date"
        },
        "issueNumber" : {
          "type" : "text"
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1574759226800",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "PTDsdadasd-ERERER",
        "version" : {
          "created" : "7040299"
        },
        "provided_name" : "logs"
      }
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-27 15:20:28

好的,问题是你的issueNumber字段没有正确的类型,如果你的目标是对它进行精确的搜索,它应该是keyword而不是textcountry也是如此。如下所示修改映射:

代码语言:javascript
复制
  "properties" : {
    "country" : {
      "type" : "keyword"
    },
    "date" : {
      "type" : "date"
    },
    "issueNumber" : {
      "type" : "keyword"
    }
  }

然后重新索引您的数据,您的查询就可以工作了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59064728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档