2010-11-25 6 views
8

Luceneを使用してWebアプリケーションの検索コンポーネントを開発しています。ユーザーのクエリをインデックスに保存して、ユーザーに代替クエリを提案したり、クエリ統計情報(よく使用されるクエリ、トップスコアリングクエリなど)を保持するために使用します。luceneを使用したクエリ統計の保持

このデータを代替クエリ候補として使用するには、クエリを分析して、どの用語が最も頻繁に使用されているかを確認し、それを使用してユーザーに提案を作成します。

しかし、どの形式でデータをインデックスするかわかりません。私は単に索引に照会を追加することを考えていましたが、索引内の多くの文書が同じ内容を持つので、そのように冗長なデータが多数存在する可能性があります。これを実現する方法について誰もが知っていますか?

ありがとうございました。

答えて

1

あなたは「私は単にインデックスにクエリを追加することを考えていたが、インデックス内の多くの文書が同じコンテンツを持っているであろうから、そのように冗長データの多くがあるかもしれない」

can tell Luceneは文書の内容を格納しない。つまり、プリンシパルオーバーヘッドは固有の用語であり、インデックス自体である。だから、各クエリーをユニークなドキュメントとして保存するのは大きなオーバーヘッドではないかもしれません...この方法で、どんな情報も捨てることはありません。

+0

私はそのことについて考えましたが、クエリ(使用回数、ヒット数)に関する統計情報も保持する必要があります。これを達成するために考えられる唯一の方法は、索引で使用され、文書を更新する前に増分しますが、これは高価な操作のようです。 – jbradaric

+0

これを行うためにlucene自体のTerm Frequenciesを使用できますか? http://stackoverflow.com/questions/667389/get-term-frequencies-in-lucene。クエリの推奨事項をリアルタイムで実行するには、事前に期間freqを事前に計算して保存する必要があります。 – Joel

+0

私は一意のフィールドとしてクエリを格納しない場合、私はTermFrequenciesを使用することができますが、私はそれを避けるために望んでいた。しかし、ソリューションが存在していても、より良いソリューションを見つけ出すまでは、クエリを非一意であるとして保存する必要があるようです。 – jbradaric

1

まず、既存のインデックスとは別にクエリを保存する必要があります。問題は重複したデータではなく、むしろあなたのインデックスを「水を下ろし」ます。同じインデックスにクエリを格納すると、検索の関連性が損なわれる可能性があります。これには次のオプションがあります。

  • 別のLuceneインデックスを使用してください。
  • Solrを2つの別個のcores(ドキュメント用とクエリ用)を使用してください。
  • クエリログを使用します。スコアをストアします。後処理を使用してクエリ統計を構築します。これはWebアプリケーションなので、おそらくTomcatのようなサーブレットコンテナを使用してこれを記録できます。

次に、Auto-Suggest From Popular Queries Using EdgeNGramsは、Solrを使用しているクエリ候補の代替実装を示唆しています。

+0

または、同じインデックスで別個のドキュメントタイプとして保存することはできますが、補助データからの実データ – Joel

関連する問題