0

さて、私はアルゴリズムを作成しています。その前に、solr が AND を実行する必要がある場合に結果を処理する方法を理解する必要があります。

    So Consider a scenario 

    id      Country    City                    
     1     India       Bangalore
     2     America     New York
     3     France      Paris
     4     America     Los Angeles 

ここで、私のクエリが country = America および city = Los Angeles であるとします.. solr はこのように動作しますか?

Take all Ids for country = America i.e Id (2 , 4)
Then take all Ids for City = Los Angeles i.e (4)
Then Find common in both result set i.e (4).

それが AND を解決する方法である場合、複雑さは高くありません。AND が多いと高すぎます。

誰でも私の疑問をはっきりさせることができますか?

編集:私の要件を明確に表すユースケースを表示します。

 Id(unique)     returnMe             desc                       name         value
1              user1            all those living in usa        country         USA
2.             user2            all those like game            game            football
3.             user1            my hobbies are                 hobby           guitar 

次のクエリで returnMe を取得するにはどうすればよいですか??

 1. For all those users who live in usa AND hobby is  guitar.
 2. For all those users who live in usa OR game is football.

Answer for query first should be user1
Answer for query second should be user1 and user2

ありがとう

4

2 に答える 2

1

フィルタが使用されている場合、ビットセットが含まれる可能性があります。フィルタの結果は、高速検索のためにビットセットとしてメモリにキャッシュされます。

しかし、一般的なケースでは、Lucene は項ごとに反復子を作成します。あなたの例では、アメリカのイテレータとロサンゼルスのイテレータがあります。次に、Lucene はこれらを繰り返し処理し、(AND の場合) すべての反復子に存在するドキュメント ID を見つけて結合します。これは非常に効率的に行うことができます: (1) マッチの合計数が最も少ない反復子を最初に反復し、(2) 現在一致する docid よりも小さい docid をスキップします。docid は (通常) 順番にスコア付けされるため、これを行うことができます。あなたの例では、一致するドキュメントの数が少ないため、ロサンゼルスの用語のスコアラーが最初に評価されます。最初の一致は「4」です。次に、アメリカの用語のスコアラーが評価され、「4」にスキップするように指示されます-一致が見つかり、

要約すると、これについて心配する必要はありません。Lucene と Solr を使用した場合、この種のパフォーマンスは非常に優れています。それが彼らが広く受け入れられるようになった主な理由です。

于 2013-05-05T18:53:53.170 に答える