本文介绍了SOLR中基于排名的排名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

1.sol-lucene的演示

1.demo of solr lucene

2.lucene主要致力于文本索引

2.lucene focuses mainly on text indexing

3.使用示例解释lucene

3.explain lucene with example

4.lucene是开放源代码

4.lucene is an open source

当我将使用查询文本 lucene 搜索时,我需要按以下顺序搜索结果

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

2.lucene主要致力于文本索引

2.lucene focuses mainly on text indexing

4.lucene是开放源代码

4.lucene is an open source

3.使用示例解释lucene

3.explain lucene with example

1.sol-lucene的演示

1.demo of 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中添加customSimilarity类来禁用termfrequency,但是我却收到了错误消息

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

[schema.xml] fieldType的插件初始化失败:加载类错误

以下是CustomSimilarity类的类定义

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;
    }

}

solrconfig中的jar文件路径

And jar file path in solrconfig

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

任何帮助都会被申请

推荐答案

有两件事.

1)您忘了写@Override,这样您对tf的定义就可以了.

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

2)在指定jar路径时,正则表达式必须为.*.jar"

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;
    }

}

正则表达式:

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

这篇关于SOLR中基于排名的排名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 03:27
查看更多