Elasticsearch 索引逗号分隔值并将它们用作过滤器
Elasticsearch index comma-separated values and use them as filters
我目前正在使用以下配置将 element
字段索引为 "element" : "dog,cat,mouse"
:
ES 配置:
"settings": {
"analysis": {
"analyzer": {
"search_synonyms": {
"tokenizer": "whitespace",
"filter": [
"graph_synonyms",
"lowercase",
"asciifolding"
],
},
"comma" : {
"type" : "custom",
"tokenizer" : "comma"
}
},
"filter": {
"graph_synonyms": {
...
}
},
"normalizer": {
"normalizer_1": {
...
}
},
"tokenizer" : {
"comma" : {
"type" : "pattern",
"pattern" : ","
}
},
}
},
字段映射:
"mappings": {
"properties": {
"element": {
"type": "keyword",
"normalizer": "normalizer_1"
}
................
}
}
值 dog,cat,mouse
之后用作过滤器,但我想将它们分开并将每个值用作单独的过滤器。我尝试使用 multi-fields 功能并进行了以下更改,但我仍然不确定我还应该做什么。
"element": {
"type": "keyword",
"normalizer": "normalizer_1",
"fields": {
"separated": {
"type": "text",
"analyzer": "comma"
}
}
},
如果我理解正确,您有一个字段,您将值存储为 dog,cat,mouse
并且您需要单独使用它们,例如 dog
、cat
和 mouse
你可以简单地使用文本字段来存储它们,它使用 default standard analyzer,它在逗号 ,
上拆分标记。
analyze API 显示令牌
{
"text": "dog,cat,mouse",
"analyzer": "standard"
}
生成的令牌
{
"tokens": [
{
"token": "dog",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "cat",
"start_offset": 4,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "mouse",
"start_offset": 8,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 2
}
]
}
根据评论,添加一个关于如何定义 element
字段以便使用 standard
分析器的示例,注意当前它被定义为 keyword
和规范器,因此 standard
未使用分析器。
索引映射
PUT /你的索引/
{
"mappings": {
"properties": {
"name": {
"element": "text"
}
}
}
}
我目前正在使用以下配置将 element
字段索引为 "element" : "dog,cat,mouse"
:
ES 配置:
"settings": {
"analysis": {
"analyzer": {
"search_synonyms": {
"tokenizer": "whitespace",
"filter": [
"graph_synonyms",
"lowercase",
"asciifolding"
],
},
"comma" : {
"type" : "custom",
"tokenizer" : "comma"
}
},
"filter": {
"graph_synonyms": {
...
}
},
"normalizer": {
"normalizer_1": {
...
}
},
"tokenizer" : {
"comma" : {
"type" : "pattern",
"pattern" : ","
}
},
}
},
字段映射:
"mappings": {
"properties": {
"element": {
"type": "keyword",
"normalizer": "normalizer_1"
}
................
}
}
值 dog,cat,mouse
之后用作过滤器,但我想将它们分开并将每个值用作单独的过滤器。我尝试使用 multi-fields 功能并进行了以下更改,但我仍然不确定我还应该做什么。
"element": {
"type": "keyword",
"normalizer": "normalizer_1",
"fields": {
"separated": {
"type": "text",
"analyzer": "comma"
}
}
},
如果我理解正确,您有一个字段,您将值存储为 dog,cat,mouse
并且您需要单独使用它们,例如 dog
、cat
和 mouse
你可以简单地使用文本字段来存储它们,它使用 default standard analyzer,它在逗号 ,
上拆分标记。
analyze API 显示令牌
{
"text": "dog,cat,mouse",
"analyzer": "standard"
}
生成的令牌
{
"tokens": [
{
"token": "dog",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "cat",
"start_offset": 4,
"end_offset": 7,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "mouse",
"start_offset": 8,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 2
}
]
}
根据评论,添加一个关于如何定义 element
字段以便使用 standard
分析器的示例,注意当前它被定义为 keyword
和规范器,因此 standard
未使用分析器。
索引映射
PUT /你的索引/
{
"mappings": {
"properties": {
"name": {
"element": "text"
}
}
}
}