web-dev-qa-db-ja.com

ElasticSearchドキュメントから分析されたトークンを取得する

ElasticSearchドキュメントの分析/トークン化されたテキストにアクセスしようとしています。

Analyze API を使用して、分析モジュールに従って任意のテキストを分析できることを知っています。そのため、ドキュメントからデータをコピーしてAnalyze APIに貼り付け、どのようにトークン化されたかを確認できました。

ただし、これは不必要に時間がかかるようです。 ElasticSearchに検索結果でトークン化されたテキストを返すように指示する方法はありますか?ドキュメントを調べましたが、何も見つかりませんでした。

34
Clay Wardell

この他の答えを見てください: elasticsearch-フィールドのトークンを返す 。残念ながら、提供されたスクリプトを使用してフィールドのコンテンツをその場で再分析する必要があります。
この機能を公開するためのプラグインを作成できるはずです。アイデアは、2つのエンドポイントを以下に追加することです。

  • solr TermsComponent と同じようにLuceneのTermsEnumを読み取ることができます。これは自動提案にも役立ちます。それはドキュメントごとではなく、用語の頻度とドキュメントの頻度を持つインデックス上のすべての用語だけであることに注意してください(多くの一意の用語を使用すると潜在的に高価になります)
  • 有効になっている場合、solr TermVectorComponent のように、用語ベクトルの読み取りを許可します。これはドキュメントごとですが、用語ベクトルを格納する必要があり(マッピングで構成できます)、有効になっている場合は位置とオフセットも取得できます。
15
javanna

この質問は少し古いですが、多分私は追加の回答が必要だと思います。

ElasticSearch 1.0.0で Term Vector API が追加され、ドキュメントごとに内部でElasticSearchが格納するトークンに直接アクセスできるようになりました。 APIドキュメントはこれについてはあまり明確ではありませんが(例でのみ言及されています)、APIを使用するには、最初に マッピング定義term_vectorを使用して用語ベクトルを保存することを指定する必要があります各フィールドのプロパティ。

16

スクリプトを使用することもできますが、サーバーでスクリプトを有効にする必要があります。

curl 'http://localhost:9200/your_index/your_type/_search?pretty=true' -d '{
    "query" : {
        "match_all" : { }
    },
    "script_fields": {
        "terms" : {
            "script": "doc[field].values",
            "params": {
                "field": "field_x.field_y"
            }
        }
    }
}'

スクリプトを許可するためのデフォルト設定はエラスティック検索のバージョンによって異なるため、公式ドキュメントで確認してください。

5