質問

Solrで名前付きエンティティを検索するカスタムトークナイザーを作成しました。この情報を使用して、lucene / solrドキュメント内の個別のフィールドに入力できるようにしたいと思います。

例として、" locations"と呼ばれる複数値フィールドにデータを入力します。テキストから抽出されたすべてのロケーション名を使用します。場所を抽出するために、テキストは最初にトークン化されて単語が分離され、どのトークンが場所であるかが判別されます。このプロセスの後、トークナイザー用のトークンを発行するだけでなく、フィールド「locations」にデータを入力します。テキストから抽出されたすべてのロケーション名を使用します。

私が行った調査では、TokenizerまたはTokenizerFactoryからSolrDocumentオブジェクトにアクセスする方法がないため、ここからフィールドにデータを入力する方法はありません。

これまでに考え出した解決策は、テキストを処理してフィールドを抽出するカスタムUpdateRequestProcessorFactoryを作成し、TokenizerがテキストAGAINを処理してトークンを取得することです。この作業を行い、テキストを1回だけ処理できる方法を見つけたいと思います。

役に立ちましたか?

解決

私がやる方法は、あなたが撮影しているように見えるものよりエレガントではありません:

名前付きエンティティレコグナイザーを使用してドキュメントを前処理し、すべてのエンティティを別のファイルに保存します。次に、Solrに公開するときに、このファイルからエンティティを読み取り、エンティティフィールド(人、場所、組織によって異なる)にデータを入力します。これは単純化できますが、私はすでに他の作業の解析を行っていたため、既存のものを再利用する方が簡単でした。

他のヒント

これはluceneで機能すると思うアイデアですが、solrで可能かどうかはわかりません。あなたが提案するように、典型的なトークンストリームチェーンの外で文字列をトークン化してから、 NOT_ANALYZED オプション。 document.add(...)を使用して各トークンを個別に追加する必要があります。luceneは、検索のために単一のフィールドとして扱います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top