0

さまざまな種類のドキュメントを使用するアプリケーションがあります。それぞれのタイプには独自のコーパスがあり、それらが互いに影響し合うことを望んでいません。

たとえば、あるタイプにXという用語が多数含まれている場合、他のタイプのXのIDFスコアが低くなることは望ましくありません。

これは複数のインデックスを使用して実現できることは知っていますが、私には多くの種類があり、それらの中にはドキュメントの数が少ないものもあります。したがって、各タイプのインデックスはパフォーマンスに悪影響を及ぼします。

1つのインデックスを持つタイプごとに一意の用語ベクトルを持つことができる方法はありますか?

私はまだ検索エンジンの実装を選択していなかったので、ElasticsearchやSolrの回答をいただければ幸いです。

4

2 に答える 2

0

IDFの影響を軽減または排除することで、いつでもIDFを調整できます。

CustomSimilarityクラスから始めることができます。
これにより、IDF計算を変更できます。

実際の実装である参照用のluceneDefaultSimilarityクラスを確認してください。

于 2013-02-06T03:57:40.980 に答える
0

Elasticsearch では、あるタイプのベクトルという用語が別のタイプのベクトルに影響を与えるのを避けるために、各タイプを個別のインデックスに含める必要があります。

デフォルトでは、Elasticsearch は新しいインデックスごとに 5 つのプライマリ シャードを割り当てます (各シャードは Lucene インスタンスです)。小さい型の場合は、1 つのプライマリ シャードだけでインデックスを作成できます。

curl -XPUT 'http://127.0.0.1:9200/user/?pretty=1'  -d '
{
   "settings" : {
      "number_of_shards" : 1
   }
}
'

アップデート

パフォーマンスに関するご質問について。関連するすべてのシャードで並行して検索が行われるため、パフォーマンスは実際には、使用しているハードウェアの量とシャードの大きさ (そしてもちろん、クエリの複雑さ) によって異なります。

ユースケースとデータをテストせずに、複数のインデックスがパフォーマンスに与える影響を正確に見積もることは困難です。とはいえ、ES は分散検索用に構築されており、このシナリオでは非常にうまく機能します。

更新 2

同じインデックス内の異なるタイプのフィールドnameには、そのフィールド内のすべてのタイプの用語が含まれるため、用語の頻度が低下します。

nameただし、たとえば、 and のフィールドを使用する代わりに、 userandproductを使用するuser_nameなど、さまざまなタイプで異なるフィールド名を使用することもできますproduct_name。頻度という用語は、そのタイプのそのフィールドだけに関連します。ドキュメントの頻度は明らかにすべてのドキュメントを考慮に入れますが、それがグローバルな影響であることを考えると、違いはありません。

于 2013-02-06T10:31:58.440 に答える