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

术语过滤器的elasticsearch连字符问题

牟黎昕
2023-03-14
问题内容

我只有一个词过滤器,下面的elasticsearch查询。我的查询要复杂得多,但我只是想在此处显示问题。

{
    "filter": {
            "term": {
                    "field": "update-time"
                }
        }
}

当我将带连字符的值传递给过滤器时,返回的结果为零。但是,如果我尝试不使用未连接的值,则会得到结果。我不确定连字符是否在这里成为问题,但是我的情况使我相信。

有没有办法避免连字符,以便过滤器返回结果?我曾尝试从Lucene论坛上读到带有反斜杠的转义符,但这无济于事。

另外,如果我将GUID值传递给带有连字符并用花括号括起来的该字段,则类似-{ASD23-34SD-
DFE1-42FWW}的代码,我需要小写字母字符并且需要转义大括号呢?

谢谢


问题答案:

我想您的字段已经过分析,这是elasticsearch中字符串字段的默认设置。结果,当它被索引时,它不是被索引为一个术语“ update-
time”,而是被索引为两个术语:“ update”和“
time”。这就是为什么您的术语搜索找不到该术语的原因。如果您的字段将始终包含必须完全匹配的值,那么最好在映射中将此类字段定义为未分析。您可以通过使用新映射重新创建索引来做到这一点:

curl -XPUT http://localhost:9200/your-index -d '{
    "mappings" : {
        "your-type" : {
            "properties" : {
                "field" : { "type": "string", "index" : "not_analyzed" }
            }
        }
    }
}'

curl -XPUT  http://localhost:9200/your-index/your-type/1 -d '{
    "field" : "update-time"
}'

curl -XPOST http://localhost:9200/your-index/your-type/_search -d'{
    "filter": {
        "term": {
                "field": "update-time"
        }
    }
}'

另外,如果您希望在基于此字段查找记录时有一定的灵活性,则可以保持对该字段的分析并使用文本查询:

curl -XPOST http://localhost:9200/your-index/your-type/_search -d'{
    "query": {
        "text": {
                "field": "update-time"
        }
    }
}'

请记住,如果对您的字段进行了分析,那么只需搜索单词“ update”或单词“ time”,即可找到该记录。



 类似资料:
  • 我有以下弹性搜索查询只有一个术语过滤器。我的问题要复杂得多,但我只是想在这里展示这个问题。 当我将一个连字符的值传递给过滤器时,返回的结果为零。但如果我尝试不使用未被忽略的值,我会得到结果。我不确定连字符在这里是否是一个问题,但我的场景让我相信这一点。 有没有办法跳过连字符,这样过滤器就会返回结果?我曾试图用反斜杠来逃避连字符,这是我从Lucene论坛上读到的,但没有用。 此外,如果我将GUID值

  • 问题内容: 我的查询是这样的: 它会引发QueryParsingException [[comos_v2] [条件]过滤器不支持[mediaType]] ,而映射中不存在“ mediaType”字段。我的问题是为什么术语过滤器不引发异常? 问题答案: 以上不是有效的查询DSL。在上述条款过滤器中,“ mediaType”字段的值应为数组 应该是以下内容:

  • 问题内容: 我试图获取记录在“标题”中,然后是X个字符。 注意:并非所有记录都包含标题字段。 我努力了: 结果,我得到这个错误: 我该如何解决? 问题答案: 您需要考虑到某些文档可能具有空字段。因此,您可以使用常规的空安全运算符。另外,请确保改用POST方法:

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 以下是数据集的快照: 我想获得员工名单以及employeeStatus和employeeAddr。 所以我在employeeId上使用术语聚合,然后使用employeeStatus和employeeAddr的子聚合来获得这些详细信息。下面的查询正确返回结果。 现在我只想要永久身份的员工。所以我正在应用过滤器聚合。 现在的问题是雇员地址聚合没有为雇员地址返回存储桶,因为记录2在聚合完成之前就被过滤掉

  • 如何在执行查询前过滤ElasticSearch2.2中的文档。我引用了这个页面,但仍然无法框出正确的查询。 https://www.elastic.co/guide/en/elasticsearch/reference/2.2/query-filter-context.html 这就是我想做的…我有很多应该从句,每个有2个必须从句。WOLLE子句中的任何一个都应该匹配以检索文档。我只包括了一个sh