Position Based Rank in SOLR

只愿长相守 提交于 2021-01-28 01:57:33

问题


I need to sort SOLR search results based on position of search query.For example I have 4 documents

1.demo of solr lucene

2.lucene focuses mainly on text indexing

3.explain lucene with example

4.lucene is an open source

when I will search with query text lucene then I need result in following order

2.lucene focuses mainly on text indexing

4.lucene is an open source

3.explain lucene with example

1.demo of solr lucene

i.e. boost search query in first and second position higher than other

Following is field defination I have used on which I need position based sort

*<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>*

for this I have tried to disable termfrequency by adding customSimilarity class in solr but I am getting error as

Plugin init failure for [schema.xml] fieldType : Error loading class

Following is the class defination for 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;
    }

}

And jar file path in solrconfig

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

Any help will be appriciated


回答1:


There are two things.

1) You forgot to write @Override, so that your definition of tf is picked up.

2) In specifying jar path, regex has to be ".*.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" /> 


来源:https://stackoverflow.com/questions/61931729/position-based-rank-in-solr

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!