在elasticsearch

时间:2017-05-08 18:15:06

标签: java elasticsearch lucene

我是elasticsearch的新手。我想在elasticsearch中创建一个自定义分析器,使用自定义过滤器和自定义词干分析器。我知道ElasticSearch是建立在lucene之上的,而在lucene中,定制的stemmer支持就在那里。但是,我无法找到任何示例,它显示了lucene中的自定义分析器/词干分析器实现以及在elasticsearch中的相同集成。

为糟糕的英语道歉。提前谢谢。

  

编辑1

我想要的是Hinglish Stemmer,它会将以下输入转换为以下输出: -

  • Rama,Raam,Ram => RAM
  • Sachin,Sacheen,Sachina,Sacheena,Sachhin =>萨钦
  • Kuldeep,Kooldeep,Kuldip,Kooldipa => kuldip

2 个答案:

答案 0 :(得分:2)

最后,经过几次打嗝,我终于能够创建hinglish-stemmer的实现了。它可以在以下链接中找到: -

https://github.com/Mangu-Singh-Rajpurohit/hinglish-stemmer/

答案 1 :(得分:1)

我会尝试写一个简单的答案,如果您有任何疑问,请告诉我。

第一步:创建custom_stemming文件(此处为" custom_stems.txt"),如下所示,并将其放入config文件夹(我把它放在" config / analysis / custom_stems下。 TXT&#34):

rama => ram
raam => ram
sachin => sachin
sacheen => sachin
sachina => sachin
sacheena => sachin
kuldeep => kuldip
kooldeep => kuldip
kooldipa => kuldip

然后创建一个具有足够映射的索引(我使用此示例中的映射,您可以创建其他分析器,这里唯一重要的部分是" custom_stems" stemmer):

PUT /my_index
{
    "settings": {
        "analysis" : {
            "analyzer" : {
                "my_analyzer" : {
                    "tokenizer" : "standard",
                    "filter" : ["lowercase", "custom_stems"]
                }
            },
            "filter" : {
                "custom_stems" : {
                    "type" : "stemmer_override",
                    "rules_path" : "analysis/custom_stems.txt"
                }
            }
        }
    }
}

测试它是否有效:

GET /my_index/_analyze
{
  "text": ["Rama"],
  "analyzer": "my_analyzer"
}

你应该在输出中看到:

{
  "tokens": [
    {
      "token": "ram",
      "start_offset": 0,
      "end_offset": 4,
      "type": "<ALPHANUM>",
      "position": 0
    }
  ]
}

请注意,我使用了:

  • Elasticsearch 5.3.2
  • Kibana 5.0.1