当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch dsl术语筛选器不能使用字符串字段

呼延渝
2023-03-14

我试图使用elasticsearch_dslpython客户端应用term筛选弹性搜索索引数据,但它不能处理字符串字段。

这是我的ES索引数据:

s = Search(using=es, index='idx_object', doc_type='ip').source(include=['id', 'status', 'username'])

[{u“_score”:1.0,u“_type”:u“ip”,u“_id”:u“79”,u“_source”:{u“status”:u“published”,u“username”:u“jackie@example.com”,u“id”:79},u“_index”:u“idx_object”},{u“_score”:1.0,u“_type”:u“ip”,u“id”:u“84”,u“_source”:{u“status”:u“published”,u“username”:u“julia@example.com”,u“id”:84},u“,u“_id”:u“62”,u“_source”:{u“status”:u“published”,u“username”:u“brad@example.com”,u“id”:62},u“index”:u“idx_object”},{u“_score”:1.0,u“_type”:u“ip”,u“id”:u“96”,u“_source”:{u“status”:u“published”,u“username”:u“brad@example.com”,u“id”:96},u“_index”:u“idx_object”},u“_score”:1.0,

现在,如果我在id integer字段中应用一个过滤器,它就起作用了。

s = Search(using=es, index='idx_object', doc_type='ip').source(include=['id', 'status', 'username']).filter("term", id=79)

输出:

[{u“_score”:0.0,u“_type”:u“ip”,u“_id”:u“79”,u“_source”:{u“status”:u“published”,u“username”:u“jackie@example.com”,u“id”:79},u“_index”:u“idx_object”}]

s = Search(using=es, index='idx_object', doc_type='ip').source(include=['id', 'status', 'username']).filter("term", username='jackie@example.com')

[]

共有1个答案

姬泰
2023-03-14

username字段可能是文本字段术语查询查找完全匹配,即它将在反向索引中查找带有jackie@example.com的令牌

如果您使用的是ES5.x,您可以尝试将查询更改为

s = Search(using=es, index='idx_object', doc_type='ip').source(include=['id', 'status', 'username']).filter("term", username.keyword='jackie@example.com')

在ES版本<5.x的情况下。

    null
 类似资料:
  • 我有一个返回字符串[][]的方法,如下所示: 我做错了什么?

  • 我想从包含单词Evil(filterString)的数组中删除一些元素。 以下是我从原始阵列(来宾)获得的信息: 只希望客人数组更新一旦所需的字符串(邪恶)被过滤。

  • 使用Spark 1.5和Scala 2.10.6 我试图通过一个字段“tags”(字符串数组)来筛选一个数据表。查找所有具有标记“private”的行。 得到: 线程“main”org.apache.spark.sql.analysisException中的异常:由于数据类型不匹配,无法解析“contains(tags,private)”:参数1需要字符串类型,但“tags”是数组类型; 更新:标

  • 我试图使这个printf工作,但我不断得到一个异常抱怨第一个'%'运算符。我像这样多次使用printf,从来没有出现过问题。我正在使用Eclipse。 为什么我的陈述不起作用,我如何让它起作用? 在第18行,第二个用于表示文本 (不一定是程序中的实际代码) 免责声明:这是一个家庭作业,但我已经为它写好了完整的代码。我只需要克服这个错误,并得到我的老师的许可,就可以发布这样的问题。

  • 我在用LuceneNet在个人项目中,需要处理案例,但找不到一个好的方法,Lucene将使用相同类型的查询处理这两个案例。 基本查询使用带有StandardAnalyzer的MultiFieldQueryParser和NumericRangedFilter按日期进行筛选(日期保存为长值)。 问题是,我希望过滤器处理空搜索字符串,而不必使用两个不同的查询解析器,一个用于空搜索字符串,另一个用于用户输

  • 我使用的是Spark 1.3.0和Spark Avro 1.0.0。我从存储库页面上的示例开始工作。以下代码运行良好 但是如果我需要查看doctor字符串是否包含子字符串,该怎么办?因为我们是在字符串中编写表达式。我该怎么做“包含”?