ElasticSearch中的英文分析器(词干)不起作用

问题描述 投票:0回答:2

我尝试在弹性搜索中应用自定义英语分析器以及标准英语分析器。我的目标特别是使用词干。所以我要说我的文件中有以下文字:封面,印象。

现在,如果我搜索例如覆盖或令人印象深刻或印象,我得到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"}

这也不起作用(即使使用像词干这样的过滤器)。

我真的试图找到一个解决方案几个小时,但我无法让它工作。非常感谢帮助。谢谢!

UPDATE

这是我用来创建索引的代码(我的最新尝试,根据我的描述,我还尝试了其他方法来应用该方法):

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"}
                    }
        }
      }
    }
}
elasticsearch analyzer stemming
2个回答
0
投票

你的问题是你有你的filter密钥,你所有的命名过滤器都在错误的地方。它被放置在analyzer内,但应该是analyzer的兄弟关键。

所以我的赌注是以下配置应该按预期工作:

{
  "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":{
          "type":"custom",
          "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"
          }
        }
      }
    }
  }
}

0
投票
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!"
}

我认为这会有所帮助。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.