使用docValues计算字符串字段的术语向量上的构面

时间:2014-04-04 16:13:46

标签: solr

我的SOLR模式中有一个字段,其定义如下:

<field name="text_t" type="text_t" indexed="true" multiValued="true" termVectors="true" />

此字段用于搜索,但我们还会计算此字段的构面。 Facets工作正常,但使用相当多的资源,可能是因为条款的反向索引必须(重新)反转。在任何提交之后构建fieldValud-Cache非常慢且性能严重问题。阅读我认为的文档,docValues应该解决这个问题。但是,如果我将docValues="true"添加到字段定义中,则会出现以下错误:

Field type text_t{class=org.apache.solr.schema.TextField,analyzer=org.apache.solr.analysis.TokenizerChain,args={class=solr.TextField, positionIncrementGap=100}} does not support doc values

任何提示如何让docValues使用具有termVector的字符串字段?或者如何加速这样一个领域的分面?

1 个答案:

答案 0 :(得分:3)

在您遇到问题的字段StrField旁边添加第二个字段。使用这个新字段进行分面,并用另一个做任何你想做的事。

一般情况下,我不建议在Solr中使用一个字段用于太多目的。如果要在字段中进行搜索,请针对该搜索目的进行优化,如果您希望通过该字段进行构面,请添加针对分面优化的第二个字段。如果这需要在多个字段中复制内容,那就这样吧。

如果您go by Solr's Wiki要用于分面的字段具有以下规范

  

由于分面字段通常被指定用于两个目的,即人类可读的文本和向下钻取查询值,因此它们的索引常常与用于搜索和排序的字段不同:

     
      
  • 它们通常不会被标记为单独的词语
  •   
  • 它们通常不会映射到小写
  •   
  • 通常不会删除人类可读的标点符号(双引号除外)
  •   
  • 通常不需要存储它们,因为存储的值看起来很像索引值,并且构面机制用于值检索。
  •   

为什么我要写这一切,因为我可以看到你使用了自定义字段类型,我认为这种字段类型采用了某种类型的标记化。这可以解释为什么你开始看到性能问题。