0

各ドキュメントのランク付けされたタグを含むLucene検索インデックスを設計しています。

例:

Document 1
tag: java , rank 1.2
tag: learning, rank 2.1
tag: bugs, rank 1.2
tag: architecture: rank 0.3

タグは、スコアも割り当てている自動分類アルゴリズムから取得されます。

タグの組み合わせを検索して最も関連性の高い結果を返すことができるように、インデックスを設計するにはどうすればよいですか?例、java+learningを検索します

最初に各タグのFIELDを作成し、ランクを使用して各ドキュメントのフィールドをブーストしました。これはパフォーマンスの観点から良いアプローチですか?10,000個の可能なタグがある場合はどうなりますか?Luceneに10,000のFIELDSがあるのは良い考えですか?

Field tag = new Field(
        FIELD_TAG+tag.getId(),
        "y",
        Field.Store.NO,
        Field.Index.NOT_ANALYZED);

tag.setBoost(tag.getRank());

luceneDoc.add(tag);

代わりにすべてのタグを同じフィールドに追加する場合、ランクをどのように考慮することができますか?

4

1 に答える 1

0

私も検索でこの問題を抱えていました...私が間違っているかどうか教えてください...

「タグ」のような1つのフィールドに「javalearningbugsarchitecture」という値を含めることができ、WhiteSpaceTokenizerを使用するとよいでしょう。

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.WhitespaceTokenizerFactory

しかし、これを行うと、各単語を自慢することはできず、フィールド「タグ」をブーストすることができます...

このLuceneを実行すると、ユーザーが「javabugs」または「architecturein java」を検索したときに良いスコアが得られませんが、この単語を含むすべてのドキュメントが返されます。

しかし、あなたが言ったように、たくさんの「タグ」を実行して、それぞれをブーストすることができます...または、新しいクエリパーサーを作成することができますhttp://today.java.net/pub/a/today/2003/11/07 /QueryParserRules.html継承edismax(たとえば)フィールドを希望どおりに機能させる。

それはあなたが望むものですか?

わぁ...もう1つ、フィールドをたくさん追加すると、ドキュメントインデクサーが遅くなり、インデックスが大きくなります(おそらく検索には適していません)。

于 2013-03-15T16:29:11.693 に答える