インデックスされているコンテンツデータから単語を抽出したい。

私もElasticsearchを触って1ヶ月程度の初心者です。
同様にSuggest機能を検討しまして、ここで相談したときのスレッドがございますので、そちらを共有します。

Suggestに関してましては、私もSuggest用のIndexを作成して、そのIndex対して前方一致なりの実装が必要と理解しました。Suggest用のIndexを作成するのが面倒だったので、私の場合は、significanttext-aggregation を使う方法を採りました。

サンプルクエリですが、入力文字列がマッチするドキュメントに対して、significanttexのaggregationをかけています。実行結果として入力文字列と関連が強い名詞の一覧を取得できますので、それをSuggestとして使用しています。

GET {index}/{type}/_search
{
    "size": 0,
    "query": {
        "bool" : {
            "should" : [
                { "match" : {"fielditem.kuromoji": "入力文字" }}
            ]
        }
    },
    "aggs": {
        "my_keywords": {
            "significant_text": {
                "field": "fielditem.meishi",
                "filter_duplicate_text": true
            }
        }
    }
}

この方法で得られたSuggestはまだこちらでも検証段階なので、精度等については調整が必要かと思います。

1 Like