当前位置: 首页 > 面试题库 >

在ElasticSearch查询中保留术语的顺序

孟祯
2023-03-14
问题内容

在ElasticSearch中是否有可能形成可以保留术语顺序的查询?

一个简单的例子是使用标准分析器为这些文档建立索引:

  1. 你知道要搜索
  2. 你知道搜索
  3. 知道为您搜寻

我可以查询+you +search,这将返回所有文档,包括第三个文档。

如果我只想检索按此特定顺序排列有术语的文档怎么办?我可以构成一个查询吗?

考虑到仅通过引用文本即可获得短语:("you know"检索第一和第二文档)在我看来,应该有一种方法可以保留不相邻的多个术语的顺序。

在上面的简单示例中,我可以使用邻近搜索,但这并不涵盖更复杂的情况。


问题答案:

您可以使用span_near查询,它具有一个in_order参数。

{
    "query": {
        "span_near": {
            "clauses": [
                {
                    "span_term": {
                        "field": "you"
                    }
                },
                {
                    "span_term": {
                        "field": "search"
                    }
                }
            ],
            "slop": 2,
            "in_order": true
        }
    }
}


 类似资料:
  • 问题内容: 我特别想知道PostgreSQL。给出以下人为的示例: 从外部查询返回的名称是否保证与内部查询的顺序相同? 问题答案: 不,在外部查询中按以下顺序排序: 内部(子)查询返回结果集。如果按此顺序进行排序,则保证从内部(子)查询传递到外部查询的中间结果集将按照您指定的方式进行排序,但是在外部查询中不对结果进行排序通过处理内部查询结果集生成的结果集,不能保证以任何方式进行排序。

  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 我试图获取缺少字段“topic.description”和匹配项“fundedunder.programme”:“abc”的文档。 映射: 我的查询如下所示:

  • 在elasticsearch term查询文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html中,声明有一个字段 然而,我无法设置它。我可以设置和而没有问题,但不能设置。 当我运行时,我得到错误状态。 我在哪里搞错了,或者文档是错误的?

  • 当使用https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html描述的术语搜索时,我没有看到预期的结果 ElasticSearch版本为2.3.2:使用该版本创建数据: 此查询显示两条记录: 这个查询显示了一条记录,正如预期的那样: 但是使用不同的术语将不会产生记录: 不返回记录

  • 问题内容: 我有以下 匹配 查询字符串: 我想它的意思是,但实际上它能执行。 然后我尝试了 术语 查询字符串: 它执行,显示 术语 查询通过数组支持多个OR条件。 我很好奇为什么 匹配 查询不支持通过数组的 OR 条件?并且它不显示任何语法错误。 问题答案: 该查询仅支持要指定的单个字符串值。官方文档中没有明确指定它,但是如果您愿意阅读的源代码,则可以看到,在解析字段时,解析器将跳过标记来分隔数组