基于职位的SOLR排名

问题描述 投票:2回答:1

我需要根据搜索查询的位置对SOLR的搜索结果进行排序,例如我有4个文档。

1.solr lucene的演示

2.lucene主要专注于文本索引。

3.举例说明lucene

4.lucene是一个开源的

当我将查询文本搜索 琉璃 那么我需要的结果是按照以下顺序

2.lucene主要专注于文本索引。

4.lucene是一个开源的

3.举例说明lucene

1.solr lucene的演示

即提升搜索查询在第一和第二位的位置,高于其他

以下是我使用的字段定义,我需要基于位置的排序。

*<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true">
    <analyzer type="index">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
        <filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="1" generateNumberParts="1" protected="protwords.txt" splitOnCaseChange="1" generateWordParts="0" preserveOriginal="1" catenateAll="0" catenateWords="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>        
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
        <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
        <filter class="solr.WordDelimiterGraphFilterFactory" catenateNumbers="1" generateNumberParts="1" protected="protwords.txt" splitOnCaseChange="1" generateWordParts="0" preserveOriginal="1" catenateAll="0" catenateWords="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
   <similarity class="CustomSimilarity" />
</fieldType>*

为此,我试图通过在solr中添加自定义相似性类来禁用terfrequency,但我得到的错误信息为

schema.xml] fieldType的插件启动失败。错误加载类

以下是CustomSimilarity classs的类定义

import org.apache.lucene.analysis.payloads.PayloadHelper;
import org.apache.lucene.search.similarities.DefaultSimilarity;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.schema.SimilarityFactory;
import org.apache.solr.search.similarities.SchemaSimilarityFactory;


public class CustomSimilarity extends SchemaSimilarityFactory{

    public float tf(float freq) {
        return 1.0f;
    }

}

以及solrconfig中的jar文件路径。

  <lib dir="${solr.install.dir:../../../..}/dist/"  regex=".*.jar" /> 

任何帮助将是感激的

solr lucene
1个回答
0
投票

有两点。

1)你忘了写@Override,这样你对tf的定义就会被接收。

2)在指定jar路径时,regex必须是".*.jar"

import org.apache.lucene.analysis.payloads.PayloadHelper;
import org.apache.lucene.search.similarities.DefaultSimilarity;
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.schema.SimilarityFactory;
import org.apache.solr.search.similarities.SchemaSimilarityFactory;


public class CustomSimilarity extends SchemaSimilarityFactory{

    @Override
    public float tf(float freq) {
        return 1.0f;
    }

}

Regex:

<lib dir="${solr.install.dir:../../../..}/dist/"  regex=".*\.jar" /> 
© www.soinside.com 2019 - 2024. All rights reserved.