# Kuromoji\_readingform を使用して読み仮名でサジェストを得たい

**URL:** <https://discuss.elastic.co/t/kuromoji-readingform/235883>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [June 5, 2020, 3:15am UTC](https://discuss.elastic.co/t/kuromoji-readingform/235883 "2020-06-05T03:15:12Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![kaiba](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kaiba/32/69753_2.png) [@kaiba](https://discuss.elastic.co/u/kaiba)\
**Post date:** [June 5, 2020, 3:15am UTC](https://discuss.elastic.co/t/kuromoji-readingform/235883/1 "2020-06-05T03:15:13Z")

</div>

お世話になっております。

「貴社の記者が汽車で帰社する」というドキュメントに対して、漢字、読み仮名でサジェストを得たいのですが、うまくいかず相談させていただきました。

indexは以下のようになっております。

```auto
PUT kaiba
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "tag_analyzer": {
            "type": "custom",
            "tokenizer": "kuromoji_tokenizer",
            "filter": [
              "kuromoji_readingform",
              "lowercase"
            ],
            "mode": "search"
          }
        }
      }
    }
  },
  "mappings": {
    "tags": {
      "properties": {
        "name_completion": {
          "type": "completion",
          "analyzer": "tag_analyzer"
        }
      }
    }
  }
}

GET /kaiba/tags/_search
{
  "suggest": {
    "hoge": {
      "prefix": "貴社",
      "completion": {
        "field": "name_completion"
      }
    }
  }
}

```

- 貴社 =\> OK
- 貴社の記 =\> OK (こんな検索はしないでしょうが)
- キシ =\> OK
- キシャ =\> OK
- キシャノ =\> OK
- キシャノキ =\> NG
- キシャノキシャ =\> NG

kuromoji\_readingformを使用せず、自前で読み仮名を得て、standard tokenizerを使用したフィールドを入れればうまくいくのですが、できればkuromoji\_readingformに寄せたいです。  
良い方法はないでしょうか？

どうも長い単語で試してみても3〜4文字でしかサジェストを得ることができないようで、他の問題のような気もします…

---

<div class="post-metadata">

**Author:** ![miki](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/miki/32/53228_2.png) [@miki](https://discuss.elastic.co/u/miki)\
**Post date:** [June 10, 2020, 2:17pm UTC](https://discuss.elastic.co/t/kuromoji-readingform/235883/2 "2020-06-10T14:17:22Z")

</div>

「貴社の記者が汽車で帰社する」をtokenizeすると「キシャ|ノ|キシャ|ガ|キシャ|デ|キシャ|スル」に分割されます。  
それに対し、「キシャノキ」や「キシャノキシャ」は、分割される1つのtokenとなるため、マッチしません。

どう分割されるかは、Analyze APIで確認してみてください。  
[https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-analyze.html)

日本語のように漢字や平仮名やカタカナがある場合は、suggesterだと特定のフィールドしか検索できないので、要件が複雑になればなるほど要件を満たす実装は難しくなります。

多くのケースでは、通常のsearch-apiを利用して、サジェストを実装する方法の方が多いと思います。以下のブログが非常にわかりやすく記載されているので、これをベースに検討するのが良いと思います。

> **[Elasticsearch キーワードサジェスト日本語のための設計](https://medium.com/hello-elasticsearch/elasticsearch-%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89%E3%82%B5%E3%82%B8%E3%82%A7%E3%82%B9%E3%83%88%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E8%A8%AD%E8%A8%88-352a230030dd)**
>
> Google に代表される「キーワードサジェスト」機能を Elasticsearch を前提に日本語向けに設計。

---

<div class="post-metadata">

**Author:** ![kaiba](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/kaiba/32/69753_2.png) [@kaiba](https://discuss.elastic.co/u/kaiba)\
**Post date:** [June 11, 2020, 1:11am UTC](https://discuss.elastic.co/t/kuromoji-readingform/235883/3 "2020-06-11T01:11:32Z")

</div>

ありがとうございます。理解できました！

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 9, 2020, 1:11am UTC](https://discuss.elastic.co/t/kuromoji-readingform/235883/4 "2020-07-09T01:11:40Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
