0

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

例として、「locations」という複数値のフィールドに、テキストから抽出されたすべての場所の名前を入力します。場所を抽出するには、最初にテキストをトークン化して単語を区切り、どのトークンが場所であるかを判別します。このプロセスの後、トークナイザーのトークンを発行しますが、フィールド「locations」にテキストから抽出されたすべてのロケーション名を入力します。

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

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

4

2 に答える 2

1

私のやり方は、あなたが狙っているように見えるものほどエレガントではありません。

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

于 2009-08-04T00:41:01.190 に答える
0

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

于 2009-06-18T23:40:45.600 に答える