我目前正试图通过库elasticutils
在现有的ElasticSearch实例中使用filter
。不幸的是,我一无所获。我不确定问题是因为我做错了一些基本的错误,还是图书馆出了问题(很可能是个问题)。在
我有一个具有特定映射的索引,包含一个string类型的字段(比如“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]
。在
我想知道我是否需要以不同的方式配置索引,也许我必须创建一个方面来使用过滤器?但我在阅读的文档中没有发现任何关于这一点的提示。在
我想使用filter
的原因是它们可以通过and
、or
和{query
也可以是布尔值的规范,但是它们通常引用must
、should
和{operator
标志,它可以设置为and
或{
所以,我现在的问题是:
pyes
)?在and
、or
、not
,以及它们的分组)是否可能(即根本不使用过滤器)?我该怎么做?(最好在elasticutils
中,但也欢迎其他库语法,例如pyes
,或简单的卷曲)。在
airza他用CURL格式给出的关于过滤器的答案一针见血。我怀疑您所看到的问题很大程度上是由于使用了抽象模块,如
elasticutils
-首先熟悉底层的ES查询协议是很好的。这将使理解elasticutils
更容易。正如我在上面的评论中所说,我建议安装'Sense',一个googlechrome的插件,可以让你轻松地查询你的ES集群:https://chrome.google.com/webstore/detail/sense/doinijnbnggojdlcjifpdckfokbbfpbo?hl=en。在Elasticsearch查询过滤器非常灵活,而且是可嵌套的。您可以很容易地将
or
过滤器嵌套在bool
must
过滤器中。示例:在本例中,结果必须与两个
must
or
过滤器和age_min
term
过滤器中的一个匹配,并且should
子句中与area
term
过滤器匹配的项目的排名将高于不匹配的项目。在解决这个问题的CURL请求非常简单:
这里与facets(facets是一种用于获取另一个查询的各种子集大小的搜索查询类型)没有特定的关系,但是如果字段a没有被索引,您将无法搜索它并找到任何内容。但是,如果是这种情况,那么您的ES查询应该只返回任何记录(因为当您查询一个非索引字段时,实际上并没有给ES任何特定的筛选指令)
我尝试使用这个库执行等效的ES搜索时,得到的查询是:
^{pr2}$你能看到的和你跑的一样。你打电话的时候发生了什么事结果.all() ? 在
相关问题 更多 >
编程相关推荐