Analyzeされたワードの一部を取得することはできますか?

使用しているのは、Elasticsearch6.2です。
次のようなデータから名詞単語のSuggest機能を作れないか検討しています。
例えば、「役割」というインプット文字列を渡すと、「役割等級」「役割等級制度」というような単語が返ってくるような動きを期待しています。

Elasticsearchの知見がまだまだ浅いため、理解できていないところが多いのですが、
データをPutしたときに下例ですと「質問」に「SampleData」の「質問文字列」、「質問.meishi」にAnalizeされた文字列が入っているものと創造しています。
試行錯誤中に試したやり方ですが、以下のようにaggrigationを実行すると、Bucketの中にAnalizeされた単語が入っていることは確認できました。

GET _search
{
  "aggs": {
    "my_sampler": {
      "sampler": {"shard_size": 100 },
      "aggs": { "my_keywords": { "significant_text": { "field": "質問.meishi" }}}
    }
  }
}

ただ、取得されるのが、 全ての文字列「"役割等級制度と呼ばれる制度は色々あるようですが、どのような違いがあるのでしょうか?"」であって、冒頭でやりたいような単語を取得することができません。
そもそも一旦Suggest用のIndexを生成する必要があるのかと悩んでおります。
ご助言、参考になるような情報がございましたら頂けないでしょうか。
よろしくお願いいたします。

・Sample Data

  {
    "ID": 1,
    "種類": "人事",
    "質問": "役割等級制度と呼ばれる制度は色々あるようですが、どのような違いがあるのでしょうか?"
  }

・定義ファイル

{
  "settings": {
    "analysis": {
      "tokenizer": {
        "kuromoji": {
          "type": "kuromoji_tokenizer",
          "mode": "search",
        }
      },
      "filter": {
        "ja_meishi_filter": {
          "type": "kuromoji_part_of_speech",
          "stoptags": [
            "名詞-代名詞",
            "名詞-代名詞-一般",
            "名詞-代名詞-縮約",
            "名詞-数",
            "名詞-非自立",
            "名詞-非自立-一般",
            "名詞-非自立-副詞可能",
            "名詞-非自立-助動詞語幹",
            "名詞-非自立-形容動詞語幹",
            "名詞-特殊-助動詞語幹",
            "名詞-接尾",
            "名詞-接尾-一般",
            "名詞-接尾-人名",
            "名詞-接尾-地域",
            "名詞-接尾-サ変接続",
            "名詞-接尾-助動詞語幹",
            "名詞-接尾-形容動詞語幹",
            "名詞-接尾-副詞可能",
            "名詞-接尾-助数詞",
            "名詞-接尾-特殊",
            "名詞-接続詞的",
            "名詞-動詞非自立的",
            "名詞-引用文字列",
            "名詞-ナイ形容詞語幹",
            "接頭詞",
            "接頭詞-名詞接続",
            "接頭詞-動詞接続",
            "接頭詞-形容詞接続",
            "接頭詞-数接続",
            "動詞",
            "動詞-自立",
            "動詞-非自立",
            "動詞-接尾",
            "形容詞",
            "形容詞-自立",
            "形容詞-非自立",
            "形容詞-接尾",
            "副詞",
            "副詞-一般",
            "副詞-助詞類接続",
            "連体詞",
            "接続詞",
            "助詞",
            "助詞-格助詞",
            "助詞-格助詞-一般",
            "助詞-格助詞-引用",
            "助詞-格助詞-連語",
            "助詞-接続助詞",
            "助詞-係助詞",
            "助詞-副助詞",
            "助詞-間投助詞",
            "助詞-並立助詞",
            "助詞-終助詞",
            "助詞-副助詞/並立助詞/終助詞",
            "助詞-連体化",
            "助詞-副詞化",
            "助詞-特殊",
            "助動詞",
            "感動詞",
            "記号",
            "記号-一般",
            "記号-読点",
            "記号-句点",
            "記号-空白",
            "記号-括弧開",
            "記号-括弧閉",
            "記号-アルファベット",
            "その他",
            "その他-間投",
            "フィラー",
            "非言語音",
            "語断片",
            "未知語"
          ]
        }        
      },
      "analyzer": {
        "ja_meishi_analyzer": {
          "type": "custom",
          "char_filter": [
            "icu_normalizer"
          ],
          "tokenizer": "kuromoji",
          "filter": [
            "lowercase",
            "cjk_width",
            "ja_meishi_filter",
            "kuromoji_baseform"
          ]
        }
      }
    }
  },
  "mappings": {
    "question": {
      "properties": {
        "質問": {
          "type": "keyword",
          "fields": {
            "meishi": {
              "type": "text",
              "analyzer": "ja_meishi_analyzer"
            }
          }
        }
      }
    }
  }
}

何を持って「単語」とみなすかというところを考えていただくほうが良いかもしれません。
「役割等級制度」までを単語としたいのか、「役割」「等級」「制度」個別の単語としたいのかというところも違ってきます。

_analyze APIを利用していただくと、Elasticsearchが単語としてみなすものがどんなものかがわかります。
また、検索結果として帰ってくるものは、入力したJSONが「そのまま」帰ってくるため、単語で区切られたものが取得できるわけではありません。

検索結果として帰ってくるものは、入力したJSONが「そのまま」帰ってくるため、単語で区切られたものが取得できるわけではありません。

ですよね。
単語を返したいのであれば、返したい「単語」を定義したIndexを作成して、
そこからscoreの高いものを取得するというのが処理フローになるのかと考えていました。
初心者質問ですみませんでした。
ありがとうございます。

いえいえ、初心者質問大歓迎です。むしろそういう質問ができる場所を目指してますし。

ちなみに、登録されてるドキュメントなどからSuggesterを作り出すことも可能です。
ただ、今回の要望に沿うかどうかは判断が必要かとは思います。

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html

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