【问题标题】:Elasticsearch query on apostrophes撇号的 Elasticsearch 查询
【发布时间】:2017-12-04 07:18:29
【问题描述】:

我在 elasticsearch 上查询,查询是 apples。在我们的索引数据中,文本呈现为 apple's。如果我像 apples 进行搜索,我没有得到任何结果。如果我搜索 apple's,我们会得到结果。但在我看来,如果我使用 apples 进行搜索,对于 apple's 查询也需要相同的结果。有什么办法可以处理这类案件。

【问题讨论】:

  • 所以你想同时抓住 apples 和两个 apple's
  • 是的,每当我查询苹果时。我想要苹果和苹果的结果。

标签: elasticsearch elasticsearch-5


【解决方案1】:

您可以通过以下方式设置 char_filter:

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "keyword",
          "char_filter": [
            "my_char_filter"
          ]
        }
    },
    "char_filter": {
      "my_char_filter": {
        "type": "mapping",
        "mappings": [
          "' => "
        ]
       }
      } 
    }
  }
}


POST my_index/_analyze
{
 "analyzer": "my_analyzer",
 "text": "apple's"
}

这将导致:

{
  "tokens": [
  {
    "token": "apples",
    "start_offset": 0,
    "end_offset": 7,
    "type": "word",
    "position": 0
  }
 ]
}

您正在从索引中删除撇号,您可以成功搜索 applesapple's

【讨论】:

  • 这是一个很好的答案。 OP 也可能会考虑英语language analyzer——如果他们也想匹配单数名词(“apple”)。
【解决方案2】:

感觉你需要一个模糊搜索,如果我理解正确的话。请看一下这篇文章:https://www.elastic.co/blog/found-fuzzy-search,如果这不是您想要的,请告诉我们。

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多