0

私はLuceneが初めてです。

アナライザーといくつかのフィルターを実装しました。元の tokenstream が変更され、Attributes が 0 の PositionIncrementAttrbute を持つトークンとして挿入されます。

例: 文: 「SO は有名です」 カスタム アナライザーといくつかのフィルターを通過し、属性をトークンに追加した後、取得する新しいトークンストリームは「SO 名詞 SocialSite 有名な JJ ポジティブ」です。SO は名詞とソーシャル サイトの両方であり、有名なのは形容詞 (JJ) であり、肯定的な言葉などです。

これは、属性 (ここでは名詞、SocialSite、JJ、Positive) に基づいて確実に検索できるようになりました。つまり、「名詞」を検索したり、「Positive」と言ったりしても、「SO は有名です」という出力を得ることができます。

ただし、ドキュメントを追加するときにこのテキスト全体を「SOは有名です」をフィールドとして配置したため、「SocialSite」と検索すると、フィールドの1つとして「SOは有名です」を持つドキュメントが出力として取得されます.

ただし、テキスト全体ではなく「SO」のみを出力として取得することは可能ですか? つまり、出力として実際のトークン (元の入力に存在するトークン) のみですか? 別の例: 「ポジティブ」と検索すると、「SO が有名」全体ではなく、「有名」が出力されるはずです。

ドキュメントにフィールドとして配置すれば取得できるはずですが、そのようなフィールドを追加するにはどうすればよいですか? なぜなら、トークンがフィルターを通過したときにのみ、すべての属性がそれにアタッチされることを知ることができるため、 indexwriter.addDocument() を実行している間、属性についてはわかりません。

私が見る典型的な問題は、新しいトークンストリームに基づいてインデックス作成が行われることですが、ドキュメントを取得すると、ドキュメントには古い実際のトークンストリーム (または実際の入力) があり、それが出力として与えられます。

ヘルプ/コメントを歓迎します

4

1 に答える 1

0

ハイライターを使ったほうがいいような?

現在Luceneには3つありますが、私は最新のものであるPostingsHighlighterから始めます。私はここにそれについて書きました: http://blog.mikemccandless.com/2012/12/a-new-lucene-highlighter-is-born.html

ハイライターは、フィールドのテキストのどの部分がクエリのどの用語と一致するかを識別します。

于 2013-05-30T10:47:00.890 に答える