尝试在ElasticSearch中设置SynonymTokenFilter

简介・背景

最近的年轻人好像把本田翼缩写成“ばっさー”。只有我想要缩写成“ホンツバ”吗?

无论哪个都可以,但从搜索引擎的角度来看,
是不是希望本田翼、ホンツバ、ばっさー等能返回相同的结果呢?
当然,作为包括搜索系统在内的服务运营方,也是希望返回相同的结果的吧?

在Job Medley中,我们使用Elasticsearch,并成功地对其进行了调优。

了解ElasticSearch的概念

由于对Elasticsearch一无所知,所以首先要从学习其基本概念开始。以下是一些我用来学习的资料:
– http://code46.hatenablog.com/entry/2014/01/21/115620
– http://blog.shibayu36.org/entry/2015/07/08/095838
– https://medium.com/hello-elasticsearch/elasticsearch-6d69b6ff5c26#.tf71jaycs

只要知道这一点就可以了。

    • データからインデックスを作成して、検索時にクエリを発行して検索する

 

    • アナライザーは、Toknizerでパースされ、Filterで整理される

 

    アナライザーは、インデックス作成用と検索用がある

将Ruby on Rails集成到项目中

为了满足这次的要求,在进行组装时,有一个条件是“需要定期更换词典”。
因此,为了避免每次词典更新时都需要更新所有的索引而造成高昂的成本,我们决定只设置搜索时的分析器。

创建字典文件

关于字典文件的写法大致有三种。

请参考以下链接:https://www.elastic.co/guide/en/elasticsearch/reference/1.4/analysis-synonym-tokenfilter.html

# 下記の用に=>を使うとマッピングされ
# ばっさーと検索すると、本田翼の結果が引っかかる
# ※「ばっさー」の結果は引っかからない
ばっさー => 本田翼

# 下記のようにカンマ(,)でつなげると
# 本田翼やばっさーで、検索すると
# 本田翼とばっさーとほんつばで検索した結果がすべて出る
ばっさー,本田翼,ほんつば

# 複数指定もできる
ばっさー=>ほんつば,本田翼

# 上書き方式ではなく、追加方式
# 下記の例は ばっさー=>ほんつば,本田翼と同じ
ばっさー=>ほんつば
ばっさー=> 本田翼

当完成追加后,请重新启动elasticsearch。

使用Elasticsearch-inquisitor来确认是否实际生效。

使用Elasticsearch-inquisitor,确认实际搜索查询的单词是否被正确解释。
※确认Elasticsearch已经正确重新启动。

在搜索请求中指定分析器。

可以在这个链接中查看analyzer参数的详细说明:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

{
    'query_string' : {
        'default_field' : 'content',
        'default_operator': 'AND',
        'query' : 'ばっさー',
        'analyzer' : 'search_analyzer',
    }
}

可以通过这个进行搜索。

总结

    • elasticsearchで類似語検索する場合は、Synonym Token Filterを使う

 

    • 基本的には、filterを設定しanalyzerを書いて、elasticsearchを再起動する

query string queryを使い、analyzerを設定し検索する

以上

请将上述内容在中文中进行同义改述,只需要一种选项:以上

广告
将在 10 秒后关闭
bannerAds