Elasticsearch - 如何为搜索和索引指定相同的分析器
Elasticsearch - How to specify the same analyzer for search and index
我正在开发西班牙语搜索引擎。 (我不会说西班牙语)但根据我的研究,目标或多或少是这样的:1.过滤停用词,如“dos”,“de”,“la”...... 2.为两个搜索词干词和索引。例如,如果您搜索“primera”,那么“primero”、“primer”也应该出现。
我的尝试:
es_analyzer={
"settings": {
"analysis": {
"filter": {
"spanish_stop": {
"type": "stop",
"stopwords": "_spanish_"
},
"spanish_stemmer": {
"type": "stemmer",
"language": "spanish"
}
},
"analyzer": {
"default_search": {
"type": "spanish"
},
"rebuilt_spanish": {
"tokenizer": "standard",
"filter": [
"lowercase",
"spanish_stop",
"spanish_stemmer"
]
}
}
}
}
}
问题:
当我在 "default_search"
中使用 "type":"spanish"
时,我的查询“primera”被词干化为“primer”,这是正确的,但即使我指定在过滤器中使用 "spanish_stemmer"
,文档索引中没有词干。因此,当我搜索“primera”时,它只显示与“primer”完全匹配的结果。有什么解决这个问题的建议吗?
可能的修复,但我还没有弄清楚语法:
- 在过滤器中使用内置
"spanish"
分析器。语法是什么?
- 在
"default_search"
中添加西班牙语词干分析器和停用词。但我不知道如何在那里使用复合设置。
添加包含索引数据、映射、搜索查询和搜索结果的工作示例
索引映射:
{
"settings": {
"analysis": {
"filter": {
"spanish_stop": {
"type": "stop",
"stopwords": "_spanish_"
},
"spanish_stemmer": {
"type": "stemmer",
"language": "spanish"
}
},
"analyzer": {
"default_search": {
"type":"spanish",
"tokenizer": "standard",
"filter": [
"lowercase",
"spanish_stop",
"spanish_stemmer"
]
}
}
}
},
"mappings":{
"properties":{
"title":{
"type":"text",
"analyzer":"default_search"
}
}
}
}
索引数据:
{
"title": "primer"
}
{
"title": "primera"
}
{
"title": "primero"
}
搜索查询:
{
"query":{
"match":{
"title":"primer"
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64420517",
"_type": "_doc",
"_id": "3",
"_score": 0.13353139,
"_source": {
"title": "primer"
}
},
{
"_index": "stof_64420517",
"_type": "_doc",
"_id": "1",
"_score": 0.13353139,
"_source": {
"title": "primera"
}
},
{
"_index": "stof_64420517",
"_type": "_doc",
"_id": "2",
"_score": 0.13353139,
"_source": {
"title": "primero"
}
}
]
我正在开发西班牙语搜索引擎。 (我不会说西班牙语)但根据我的研究,目标或多或少是这样的:1.过滤停用词,如“dos”,“de”,“la”...... 2.为两个搜索词干词和索引。例如,如果您搜索“primera”,那么“primero”、“primer”也应该出现。
我的尝试:
es_analyzer={
"settings": {
"analysis": {
"filter": {
"spanish_stop": {
"type": "stop",
"stopwords": "_spanish_"
},
"spanish_stemmer": {
"type": "stemmer",
"language": "spanish"
}
},
"analyzer": {
"default_search": {
"type": "spanish"
},
"rebuilt_spanish": {
"tokenizer": "standard",
"filter": [
"lowercase",
"spanish_stop",
"spanish_stemmer"
]
}
}
}
}
}
问题:
当我在 "default_search"
中使用 "type":"spanish"
时,我的查询“primera”被词干化为“primer”,这是正确的,但即使我指定在过滤器中使用 "spanish_stemmer"
,文档索引中没有词干。因此,当我搜索“primera”时,它只显示与“primer”完全匹配的结果。有什么解决这个问题的建议吗?
可能的修复,但我还没有弄清楚语法:
- 在过滤器中使用内置
"spanish"
分析器。语法是什么? - 在
"default_search"
中添加西班牙语词干分析器和停用词。但我不知道如何在那里使用复合设置。
添加包含索引数据、映射、搜索查询和搜索结果的工作示例
索引映射:
{
"settings": {
"analysis": {
"filter": {
"spanish_stop": {
"type": "stop",
"stopwords": "_spanish_"
},
"spanish_stemmer": {
"type": "stemmer",
"language": "spanish"
}
},
"analyzer": {
"default_search": {
"type":"spanish",
"tokenizer": "standard",
"filter": [
"lowercase",
"spanish_stop",
"spanish_stemmer"
]
}
}
}
},
"mappings":{
"properties":{
"title":{
"type":"text",
"analyzer":"default_search"
}
}
}
}
索引数据:
{
"title": "primer"
}
{
"title": "primera"
}
{
"title": "primero"
}
搜索查询:
{
"query":{
"match":{
"title":"primer"
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64420517",
"_type": "_doc",
"_id": "3",
"_score": 0.13353139,
"_source": {
"title": "primer"
}
},
{
"_index": "stof_64420517",
"_type": "_doc",
"_id": "1",
"_score": 0.13353139,
"_source": {
"title": "primera"
}
},
{
"_index": "stof_64420517",
"_type": "_doc",
"_id": "2",
"_score": 0.13353139,
"_source": {
"title": "primero"
}
}
]