【问题标题】:Elasticsearch - specify different index and search analyzers for one fieldElasticsearch - 为一个字段指定不同的索引和搜索分析器
【发布时间】:2016-03-13 04:52:20
【问题描述】:

我想让一个字段被不同的分析器my_analyzer_1my_analyzer_2索引,看起来像:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer_1": {
          "type":"custom",
          "tokenizer": "keyword"
        },
        "my_analyzer_2": {
          "type":"custom",
          "tokenizer": "standard"
        }
      }
    }
  },
  "mappings": {
    "Names": {
      "properties": {
        "name": {
          "type": "string",
          // Is it possible?
          "analyzer": "my_analyzer_1, my_analyzer_2"
        }
      }
    }
  }
}

并且在搜索时,手动指定使用my_analyzer_1my_analyzer_2

这意味着,对于fox brown,按术语fox 搜索。使用my_analyzer_1 时不会得到fox brown,因为fox brown 由于keyword 标记器而被分析为一个术语。虽然使用my_analyzer_2 会得到它,因为它被分析为两个术语foxbrown

Elasticsearch 允许指定 search_analyzerindex_analyzer,但似乎只允许指定单个 search_analyzer 和单个 index_analyzer。

Elasticsearch 可以满足我的要求吗?

(一种解决方法是使用 2 个字段,一个使用 keyword tokenizer,另一个使用 standard tokenizer)

【问题讨论】:

  • multifield 是您的选择。

标签: elasticsearch stringtokenizer


【解决方案1】:
"name": {
    "type": "string",
    "fields": {
        "analyzed1":   { "type": "string", "analyzer": "analyzer1" },
        "analyzed2":   { "type": "string", "analyzer": "analyzer2" }
    }
}

然后就可以查询了

`name.analyzed1` or `name.analyzed2`

取决于您是要使用analyzer1 还是analyzer2 进行查询

参考: https://www.elastic.co/guide/en/elasticsearch/reference/current/_multi_fields.html

【讨论】:

  • 不错的答案!在name上搜索类似查询时,如果没有指定分析器,它使用默认分析器。
  • 是的..它使用标准分析器。
猜你喜欢
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2014-01-07
  • 2018-11-09
相关资源
最近更新 更多