SOLR 中基于位置的排名
Position Based Rank in SOLR
我需要根据搜索位置对 SOLR 搜索结果进行排序 query.For 例如我有 4 个文档
1.demo solr lucene
2.lucene 主要关注文本索引
3.explain lucene 示例
4.lucene 是一个开源
当我将使用查询文本 lucene 进行搜索时,我需要按以下顺序搜索结果
2.lucene 主要关注文本索引
4.lucene 是一个开源
3.explain lucene 示例
1.demo 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 class 来禁用 termfrequency,但出现错误
[schema.xml] 字段类型的插件初始化失败:加载错误 class
以下是 CustomSimilarity classs
的 class 定义
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" />
如有帮助,我们将不胜感激
有两件事。
1) 你忘记写@Override了,所以你定义的tf被拿走了
2) 在指定 jar 路径时,正则表达式必须是 ".*.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 搜索结果进行排序 query.For 例如我有 4 个文档
1.demo solr lucene
2.lucene 主要关注文本索引
3.explain lucene 示例
4.lucene 是一个开源
当我将使用查询文本 lucene 进行搜索时,我需要按以下顺序搜索结果
2.lucene 主要关注文本索引
4.lucene 是一个开源
3.explain lucene 示例
1.demo 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 class 来禁用 termfrequency,但出现错误
[schema.xml] 字段类型的插件初始化失败:加载错误 class
以下是 CustomSimilarity classs
的 class 定义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" />
如有帮助,我们将不胜感激
有两件事。
1) 你忘记写@Override了,所以你定义的tf被拿走了
2) 在指定 jar 路径时,正则表达式必须是 ".*.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" />