覆盖弹性搜索的默认关键字分析
Overriding default keyword analysis for elasticsearch
我正在尝试将 elasticsearch 索引配置为具有使用 keyword
分析器进行分析的默认索引策略,然后在某些字段上覆盖它,以允许对它们进行自由文本分析。如此有效地选择自由文本分析,我在映射中明确指定分析哪些字段以进行自由文本匹配。我的映射定义如下所示:
PUT test_index
{
"mappings":{
"test_type":{
"index_analyzer":"keyword",
"search_analyzer":"standard",
"properties":{
"standard":{
"type":"string",
"index_analyzer":"standard"
},
"keyword":{
"type":"string"
}
}
}
}
}
所以standard
应该是一个分析字段,keyword
应该只是完全匹配。但是,当我使用以下命令插入一些示例数据时:
POST test_index/test_type
{
"standard":"a dog in a rug",
"keyword":"sheepdog"
}
我没有得到与以下查询的任何匹配项:
GET test_index/test_type/_search?q=dog
但是我做匹配:
GET test_index/test_type/_search?q=*dog*
这让我觉得 standard
字段没有被分析。有谁知道我做错了什么?
创建的索引没有问题。将您的查询更改为 GET test_index/test_type/_search?q=standard:dog
,它应该 return 预期结果。
如果您不想在查询中指定字段名称,请更新您的映射,以便为每个没有默认值的字段明确提供 index_analyzer
和 search_analyzer
值。见下文:
PUT test_index
{
"mappings": {
"test_type": {
"properties": {
"standard": {
"type": "string",
"index_analyzer": "standard",
"search_analyzer": "standard"
},
"keyword": {
"type": "string",
"index_analyzer": "keyword",
"search_analyzer": "standard"
}
}
}
}
}
现在,如果您尝试 GET test_index/test_type/_search?q=dog
,您会得到想要的结果。
我正在尝试将 elasticsearch 索引配置为具有使用 keyword
分析器进行分析的默认索引策略,然后在某些字段上覆盖它,以允许对它们进行自由文本分析。如此有效地选择自由文本分析,我在映射中明确指定分析哪些字段以进行自由文本匹配。我的映射定义如下所示:
PUT test_index
{
"mappings":{
"test_type":{
"index_analyzer":"keyword",
"search_analyzer":"standard",
"properties":{
"standard":{
"type":"string",
"index_analyzer":"standard"
},
"keyword":{
"type":"string"
}
}
}
}
}
所以standard
应该是一个分析字段,keyword
应该只是完全匹配。但是,当我使用以下命令插入一些示例数据时:
POST test_index/test_type
{
"standard":"a dog in a rug",
"keyword":"sheepdog"
}
我没有得到与以下查询的任何匹配项:
GET test_index/test_type/_search?q=dog
但是我做匹配:
GET test_index/test_type/_search?q=*dog*
这让我觉得 standard
字段没有被分析。有谁知道我做错了什么?
创建的索引没有问题。将您的查询更改为 GET test_index/test_type/_search?q=standard:dog
,它应该 return 预期结果。
如果您不想在查询中指定字段名称,请更新您的映射,以便为每个没有默认值的字段明确提供 index_analyzer
和 search_analyzer
值。见下文:
PUT test_index
{
"mappings": {
"test_type": {
"properties": {
"standard": {
"type": "string",
"index_analyzer": "standard",
"search_analyzer": "standard"
},
"keyword": {
"type": "string",
"index_analyzer": "keyword",
"search_analyzer": "standard"
}
}
}
}
}
现在,如果您尝试 GET test_index/test_type/_search?q=dog
,您会得到想要的结果。