elasticsearch - ElasticSearch 中的英语分析器(词干)不起作用
问题描述
我尝试应用自定义英语分析器,以及弹性搜索中的标准英语分析器。我的目标是特别使用词干。因此,假设我的文档中有以下词:封面、印象。
现在,如果我搜索封面或印象深刻或印象,我会得到 0 个结果。只有当我搜索确切的术语“封面”或“印象”时,我才会找到结果。
这是我在 elasticsearch 中的设置(根据本文档https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html):
{
"settings": {
"analysis": {
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english_"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
}
},
"analyzer": {
"rebuilt_english": {
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer"
]
}
}
}
}
}
我的映射如下所示:
"mapping": {
"_doc": {
"properties": {
"title": {"type": "text",
"analyzer": "rebuilt_english"},
"description: {"type": text"
"analyzer": "rebuilt_english"}
}
}
}
我还尝试(根据几个不同的教程)更改这样的设置(我只是在此处添加更改,而不是再次添加完整代码):
{
"settings": {
"analysis": {
"analyzer: "rebuilt_english" {
"type": "custom",
"filter": #and so on...
我在这里想念什么吗?据我了解,我需要在“设置”中设置特定分析器的设置,给它一个名称,然后在“映射”属性中使用该名称,因此每个项目都根据上面设置的设置进行分析。
我还尝试不设置任何特定设置,而只是为每个项目设置分析器属性(在映射中),例如:
"title": {"type": "text",
"analyzer": "english"}
这也不起作用(即使使用像词干这样的过滤器)。
我真的试图找到几个小时的解决方案,但我无法让它发挥作用。帮助将不胜感激。谢谢!
更新
这是我用来创建索引的代码(我最近的尝试,根据我的描述我还尝试了其他方法来应用该方法):
PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"rebuilt_english": {
"type": "custom",
"filter": {
"english_stop": {
"type": "stop",
"stopwords": "_english"
},
"english_stemmer": {
"type": "stemmer",
"language": "english"
},
"english_possessive_stemmer": {
"type": "stemmer",
"language": "possessive_english"
},
"tokenizer": "standard",
"filter": [
"english_possessive_stemmer",
"lowercase",
"english_stop",
"english_stemmer"
]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": { "type": "text",
"analyzer": "rebuilt_english"
},
"description": { "type": "text",
"analyzer": "rebuilt_english"}
}
}
}
}
}
解决方案
PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"english_stop": {
"type":"standard",
"stopwords": "_english_"
},
"my_analyzer": {
"type":"custom",
"tokenizer":"standard",
"filter":["my_stemmer"]
}
},
"filter": {
"my_stemmer":{
"type": "stemmer",
"language": "english"
}
}
}
}
}
POST /my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "I'm in the mood for drinking semi-dry wine!"
}
我认为这会有所帮助。谢谢。
推荐阅读
- apache-spark - Spark 使用 REST api 获取标准输出和标准错误
- apache - htaccess 更改域名,但前缀“www”除外。
- java - 通过本地 pom 禁用 Maven 设置镜像
- cordova - 在 Salesforce 混合应用程序中更改 bootconfig.json
- linear-regression - 线性回归中的决策边界
- android - 活动被销毁后是否可以保持显示警报对话框?
- r - 根据列生成引导样本
- mysql - MySQL:驱动程序从 5 更新到 8 后,LOAD DATA LOCAL INFILE 不起作用
- java - org.openqa.selenium.WebDriverException:通过 Selenium 启动 Chrome 浏览器时等待驱动程序服务器启动超时
- node.js - 无法通过中间件检索添加到 req 对象的值