AnalyzeのBulkAPIの代替方法を知りたい


(Sho Hatanaka) #1

AnalyzeAPIの適用結果がまとめて参照できると、想定する検索APIで対象のデータが検索されるかどうかを効率的に判別できると思っています。

AnalyzeのBulkAPIがあればと思っているのですが、存在しないようです。(Analyze APIの仕様
一つずつAnalyzeAPIで適用するのは非効率だと思っており、効率的な方法があれば知りたいです。


(Makoto Nozawa) #2

古いバージョンの頃に使っていた方法ですが、script_fieldで doc[{field名}].values; とやるとドキュメントごとにそのfieldのterm一覧が取得できます。
一度bulk indexしてから出来上がったindexからこんな感じでデータを取り出すのはどうでしょうか。
(もしかすると書式変わってるかもしれないです)

GET YOUR_INDEX/_search
{
  "size": 10,
  "script_fields" : {
      "script_terms" : {
          "script" : "doc[\"YOUR_FIELD\"].values;"
      }
   }
}

ただ、これをやると当然indexを置くためのストレージや検索のための資源が必要になります。
Analyzeする際のメモリやCPUの負荷はどうせかかるものなので、実際のところはAnalyze APIをループで回す方が効率いいんじゃないかとも思います。


(Sho Hatanaka) #3

ご回答ありがとうございます。
こんな方法もあるのですね、AnalyzeAPIのループも鑑みつつ試してみたいと思います。


(Sho Hatanaka) #4

ちなみに、下記が使えそうな気がしてきました。
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-multi-termvectors.html