【问题标题】:Elasticsearch match on contained phrase with whitespaceElasticsearch 匹配包含空格的短语
【发布时间】:2018-09-14 08:48:42
【问题描述】:

如果包含关键短语,我需要搜索应该有搜索匹配的地方,但关键短语可以有空格,并且整个短语必须在那里。

按照我的理解,index_analyzersearh_analyzer 都可以在空格上分割,也可以不分割,提供四种可能性 - 似乎没有一种能满足我的需要。

例如,假设关键短语是“one to”。这意味着我希望搜索“一二”或“一二三”来匹配,但不匹配“一”。考虑不同的选项:

  1. 对索引和搜索进行拆分 -> 不起作用,因为“one”会匹配
  2. 在索引上拆分但在搜索上不拆分 -> 不起作用,因为“一二”不匹配
  3. 不要在索引上拆分,在搜索上拆分 -> 不起作用,因为“一二”不匹配
  4. 不要在索引和搜索上拆分 -> 不起作用,因为“一二三”不匹配

【问题讨论】:

    标签: elasticsearch search tokenize


    【解决方案1】:

    一种可能的解决方案可能是为该字段创建新的mapping,类型为keyword,然后ElasticSearch 不会对其进行分析,并将“按原样”存储(实际上您可以对其运行规范化程序如果您需要以某种方式处理/更改它)。那么你就不需要和分析器打交道了。

    假设您有名称为 description 的字段,那么映射可能如下所示:

    {
      ...
      "description": {
        "type": "text", // assuming you originally have it as text
        "fields": {
          "original": "keyword",
          "ignore_above": 512 // You can skip or change it and ES applies default value. 
        }
      }
    

    上面的代码意味着ElasticSearch 将保留两个版本的消息 - 默认已分析和未分析的新版本。然后您可以使用以下名称访问它:description.original 并使用例如通配符搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 2021-03-08
      相关资源
      最近更新 更多