重写ClassicSimilarityFactory时出现Solr 5.5.0错误

时间:2016-10-26 09:04:44

标签: search solr

Context ::在覆盖ClassicSimilarityFactory时在solr-core 5.5.0中获取错误。粘贴了日志和类。重写ClassicSimilarityFactory会在覆盖ClassicSimilarityFactory时抛出错误 - 上下文::在solr-core 5.5.0中获取错误。粘贴了日志和类。重写ClassicSimilarityFactory会抛出错误 -

package com.Others;
import org.apache.lucene.analysis.payloads.PayloadHelper;
import org.apache.lucene.search.similarities.ClassicSimilarity;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.search.similarities.ClassicSimilarityFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PayloadSimilarityFactory extends ClassicSimilarityFactory {
  @Override
  public void init(SolrParams params) {
    super.init(params);
  }

  @Override
  public Similarity getSimilarity() {
    return new PayloadSimilarity();
  }
}

class PayloadSimilarity extends ClassicSimilarity  {
  private final static Logger logger = LoggerFactory.getLogger(PayloadSimilarity.class);
  //Here's where we actually decode the payload and return it.
  @Override
  public float scorePayload(int doc, int start, int end, BytesRef payload) {

    logger.info("PayloadSimilarity ---- " + payload);
    if (payload == null)
      return 1.0F;

    return PayloadHelper.decodeFloat(payload.bytes, payload.offset);
  }
}



Schema.xml file :

    <fieldType name="payloads" class="solr.TextField" indexed="true" stored="true">
        <analyzer>
          <tokenizer class="solr.WhitespaceTokenizerFactory"/>
          <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float" delimiter="|"/>
        </analyzer>
        <similarity class="com.Others.PayloadSimilarityFactory"/>
    </fieldType>

   </types>

Error Logs :

 Error creating core [catalog]: Could not load conf for core catalog: Can't load schema /Users/z002cww/repo/jarvis-solr-config/config/catalog/conf/schema.xml: FieldType 'payloads' is configured with a similarity, but the global similarity does not support it: class org.apache.solr.search.similarities.ClassicSimilarityFactory
org.apache.solr.common.SolrException: Could not load conf for core catalog: Can't load schema /Users/z002cww/repo/jarvis-solr-config/config/catalog/conf/schema.xml: FieldType 'payloads' is configured with a similarity, but the global similarity does not support it: class org.apache.solr.search.similarities.ClassicSimilarityFactory
    at org.apache.solr.core.ConfigSetService.getConfig(ConfigSetService.java:84)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:812)
    at org.apache.solr.core.CoreContainer.access$000(CoreContainer.java:87)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:467)

1 个答案:

答案 0 :(得分:0)

您必须使用SchemaSimilarityFactory作为配置的默认相似度来支持使用每个字段的相似性。

<similarity class="solr.SchemaSimilarityFactory"/>

请参阅Solr Lucene Scorerthe mailinglist answer for the same question的答案之一。