python - 通过 elasticutils 过滤的 ElasticSearch

标签 python curl elasticsearch pyes elasticutils

我目前正在尝试使用 filter在现有的 ElasticSearch 实例中通过库 elasticutils .不幸的是,我无处可去。我不确定问题是因为我做错了一些基本错误还是库中有问题(很可能是 AFAICT)。

我有一个具有特定映射的索引,包含一个字符串类型的字段(比如“A”)(没有给出明确的分析器)。该字段始终包含一个字符串列表。

我想通过在该字段 A 中包含给定字符串来过滤我的文档,所以我尝试了:

import elasticutils as eu
es = eu.S().es(urls=[ URL ]).indexes(INDEX).doctypes(DOCTYPE)
f = eu.F(A="text")
result = es.filter(f)

但这会返回一个空结果集。我也尝试使用 f = eu.F(A__in="text")但这导致了一条大错误消息,其中最有趣的部分是 [terms] filter does not support [A] .

我想知道我是否必须以不同方式配置我的索引,也许我必须创建一个 facet 才能使用过滤器?但是我在阅读的文档中没有找到任何关于此的提示。

我想使用 filter 的原因是它们可以使用 and 自由组合, or , 和 not .我还找到了一些描述 query 的规范也可以是 bool 值,但它们通常指的是 must , should , 和 must_not我认为这对我来说不够灵活。但我也发现了一些提到 operator 的规范query 的标志s 可以设置为 andor .欢迎提供任何相关信息。

那么,我现在的问题是:

  • 是配置问题吗?方面与此有关吗?
  • 我想通过跳过 lib 来测试这是否是库错误,那么我如何仅使用 curl 来执行此过滤操作?或者任何其他图书馆(可能是 pyes )?
  • 是否可以灵活组合(使用 andornot 以及它们的分组)多个查询(即根本不使用过滤器)?我该怎么做? (最好在 elasticutils 中,但也欢迎使用其他库语法,例如 pyes 或简单的 CURL)。

最佳答案

airza 以 CURL 格式回答了您正在寻找的过滤器方面的问题。我怀疑您看到的问题主要是由于使用了像 elasticutils 这样的抽象模块——最好先熟悉底层的 ES 查询协议(protocol)。这将使理解 elasticutils 更容易。正如我上面的评论,我建议安装“Sense”,这是一个用于 Google Chrome 的插件,可以让您轻松查询 ES 集群:https://chrome.google.com/webstore/detail/sense/doinijnbnggojdlcjifpdckfokbbfpbo?hl=en .

Elasticsearch 查询过滤器非常灵活 - 并且“可嵌套”。您可以很容易地将 or 过滤器嵌套在 bool must 过滤器中。示例:

{
    "query": {
        "filtered": {
           "query": {
               "match_all": {}
           },
           "filter": {
               "bool": {
                   "must": [
                       {
                           "or": [
                                 {"exists": {"field": "sessions"}},
                                 {"range": {"id": {"gte": 56000}}}
                           ]
                       },
                       {
                           "term": {"age_min": "13"}
                       }
                   ],
                   "should": [
                      {
                          "term": {"area": "1"}
                      }
                   ]
               }
           }
        }
    }
}

在此示例中,结果必须匹配两个must or 过滤器之一和age_min term 过滤器,并且与 area term 过滤器匹配的项目在 should 子句中将比不匹配的项目排名更高。

关于python - 通过 elasticutils 过滤的 ElasticSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17881706/

相关文章:

python - 为什么即使格式匹配,Python 日期时间也会失败 {Date}2016-11-22T11 :49:21. 826-05:00

windows - 如何使用 REST+cURL 更新 TeamCity 构建参数

java - Elastic Search SSL证书到期

python - 将字典与自身进行比较并有效地删除相似的键

python - opencv - 裁剪手写线(线分割)

linux - 如何从 Linux 创建不存在的目录将文件发送到 Sharepoint

elasticsearch - 由于 SearchContextMissingException 重新索引失败

amazon-ec2 - Logstash 架构决策

Python __init__.py 与 sys.path.append/insert

javascript - curl :如何修复 "Please turn JavaScript on and reload the page"