elasticsearch,Solr,Lucene,elasticsearch" /> elasticsearch,Solr,Lucene,elasticsearch" />

Solr 具有一个索引的多项频率向量

Solr 具有一个索引的多项频率向量,solr,lucene,elasticsearch,Solr,Lucene,elasticsearch,我有一个具有许多不同文档类型的应用程序。每种类型都有自己的语料库,我不希望它们会相互影响 例如,如果一种类型包含多次出现的术语X,那么我不希望这会降低其他类型中X的IDF分数 我知道这可以通过使用多个索引来实现,但我有很多类型,其中一些类型包含的文档数量很少。因此,每种类型的索引都会对性能产生不良影响 有没有办法让每种类型都有一个唯一的术语向量和一个索引 我还没有选择任何搜索引擎实现,因此我将非常感谢Elasticsearch和/或Solr的答案。您可以通过减少或消除其影响来调整IDF 您可以从

我有一个具有许多不同文档类型的应用程序。每种类型都有自己的语料库,我不希望它们会相互影响

例如,如果一种类型包含多次出现的术语X,那么我不希望这会降低其他类型中X的IDF分数

我知道这可以通过使用多个索引来实现,但我有很多类型,其中一些类型包含的文档数量很少。因此,每种类型的索引都会对性能产生不良影响

有没有办法让每种类型都有一个唯一的术语向量和一个索引


我还没有选择任何搜索引擎实现,因此我将非常感谢Elasticsearch和/或Solr的答案。

您可以通过减少或消除其影响来调整IDF

您可以从课程开始。
这将允许您修改IDF计算


检查实际实现的类的引用。

在Elasticsearch中,您需要将每种类型都包含在单独的索引中,以避免一种类型的术语向量影响另一种类型的术语向量

默认情况下,Elasticsearch为每个新索引分配5个主碎片(其中每个碎片都是Lucene实例)。对于较小的类型,您可以仅使用单个主分片创建索引:

curl -XPUT 'http://127.0.0.1:9200/user/?pretty=1'  -d '
{
   "settings" : {
      "number_of_shards" : 1
   }
}
'
更新 关于你的绩效问题。搜索并行地发生在每个相关的切分上,因此性能实际上取决于您有多少硬件和切分有多大(当然还有您的查询有多复杂)

在不测试用例和数据的情况下,很难估计多个指标对性能的影响。这就是说,ES是为分布式搜索而构建的,在这种情况下性能非常好

更新2 同一索引中不同类型的
name
字段将包含该字段中所有类型的术语,从而污染术语频率


但是,您可以尝试的一种方法是在不同的类型中使用不同的字段名,例如,不要为
用户
产品
使用
用户名
产品名
。然后,术语频率将仅与该类型中的该字段相关。文档频率显然会将所有文档都考虑在内,但鉴于这是一种全局效应,它不应该有什么区别。

为您希望完全分开的术语创建单独的索引似乎是合乎逻辑的。我认为您只希望使用任何给定查询搜索单个类型,对吗?在这种情况下,您希望从哪些操作中看到较差的性能?虽然我有在单个类型中进行的搜索,但我也有应该在所有类型上运行的搜索。我担心第二种情况的性能,但主要是担心支持100k索引所需的硬件数量。我确实希望IDF的影响,当前的相似性评分对我有好处。问题是我得到的docFreq跨越了所有文档。我无法操作docFreq,因为我事先不知道每种类型中的术语频率,并且自己管理术语频率听起来是个坏主意。那么,在单独的索引中维护数据是唯一的选择,并且从您的经验来看,它不会对性能造成坏影响,因为有数千个(可能超过10万)索引的数量不会影响搜索开销,也不会需要更多的硬件来支持它?除非有非常丰富的内容集,否则100k文档最多不会占用索引中超过几GB的空间。因此,我不认为这是一个问题。你有没有估计过一个页面上有几千个索引的影响搜索性能(我需要在所有索引中查找项目)和所需硬件上的ard?