Elasticsearch——为一个字段指定不同的索引和搜索分析器
Elasticsearch - specify different index and search analyzers for one field
我想让一个字段被不同的分析器 my_analyzer_1
和 my_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_1
或my_analyzer_2
。
这意味着,对于 fox brown
,按字词 fox
搜索。使用 my_analyzer_1
时不会得到 fox brown
,因为 fox brown
由于 keyword 分词器而被分析为一个术语。使用 my_analyzer_2
会得到它,因为它被分析为 2 个术语 fox
和 brown
.
Elasticsearch 允许指定 search_analyzer and index_analyzer,但似乎只允许指定单个 search_analyzer 和单个 index_analyzer.
我的需求可以通过 Elasticsearch 实现吗?
(一种解决方法是使用 2 个字段,一个使用 keyword
分词器,另一个使用 standard
分词器)
"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
我想让一个字段被不同的分析器 my_analyzer_1
和 my_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_1
或my_analyzer_2
。
这意味着,对于 fox brown
,按字词 fox
搜索。使用 my_analyzer_1
时不会得到 fox brown
,因为 fox brown
由于 keyword 分词器而被分析为一个术语。使用 my_analyzer_2
会得到它,因为它被分析为 2 个术语 fox
和 brown
.
Elasticsearch 允许指定 search_analyzer and index_analyzer,但似乎只允许指定单个 search_analyzer 和单个 index_analyzer.
我的需求可以通过 Elasticsearch 实现吗?
(一种解决方法是使用 2 个字段,一个使用 keyword
分词器,另一个使用 standard
分词器)
"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