【问题标题】:Elasticsearch proximity queryElasticsearch 邻近查询
【发布时间】:2019-11-08 13:19:03
【问题描述】:

我正在寻找可以给我以下结果的查询

找到中间没有“$$”的“A”和“B”

例如

doc1: "A $$ B C D"

doc2: "B $$ A C D"

doc3:“A B $$ C D”

doc4:“A C D B $$”

ans 应该是 doc3 和 doc4

【问题讨论】:

  • 不确定我是否理解 - 如果您不想在 A 和 B 之间使用 $$,答案应该是 doc3
  • 我的错,是的,答案应该是 doc3,我正在编辑问题,谢谢
  • 如果我有一些带有两个字符的字符串,例如 ** ,这是一个有效的答案 - 例如 - 是 "A * B C D $$" 有效的响应吗?
  • 是的,它是有效的

标签: elasticsearch


【解决方案1】:

Elasticsearch 分析倒排索引中的文本和索引。因此,了解如何对数据进行索引以了解如何对其进行查询是关键(数据应以您需要查询的方式进行索引)。

考虑使用标准分析器对上述文本进行索引的场景,这是默认的(Elasticsearch 提供_analyze API 来测试您的数据是如何分析的)

 curl http://localhost:9200/sampleindex/_analyze?tokenizer=whitespace&filters=lowercase -d ' { "text" : "ab $$ cc", "analyzer": "standard" } ' 

 {"tokens":[{"token":"ab","start_offset":0,"end_offset":2,"type":"<ALPHANUM>","position":0},{"token":"cc","start_offset":6,"end_offset":8,"type":"<ALPHANUM>","position":1}]}

请注意,索引不知道令牌“$$”,这意味着无法查询它(否定或肯定)。

如果字段的索引映射包含适当的分析器,它会将“$$”视为标记,那么您可以使用简单的短语查询,其中包含 must not。

【讨论】:

  • 哦,好的,我明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 2017-08-17
  • 2013-08-22
  • 1970-01-01
相关资源
最近更新 更多