Sorting 按字段值和最新日期内的Solr boost查询
我们在schema.xml中有以下设置:Sorting 按字段值和最新日期内的Solr boost查询,sorting,solr,lucene,relevance,solr-boost,Sorting,Solr,Lucene,Relevance,Solr Boost,我们在schema.xml中有以下设置: <field name="last_modified" type="date" indexed="true" stored="true" multiValued="false" omitTermFreqAndPositions="true"/> ... <field name="prefix" type="string" indexed="true" stored="true" omitTermFreqAndPositions="tr
<field name="last_modified" type="date" indexed="true" stored="true" multiValued="false" omitTermFreqAndPositions="true"/>
...
<field name="prefix" type="string" indexed="true" stored="true" omitTermFreqAndPositions="true"/>
结果:
上述查询无法按预期工作
我们认为忽略TermFrequeandPositions=true将强制阻止ITF,得分应该有效。但事实似乎并非如此!
请帮助我们:-)因此我们找到了解决方案
package com.luxactive;
import org.apache.lucene.index.FieldInvertState;
import org.apache.lucene.search.similarities.DefaultSimilarity;
public class MyNewSimilarityClass extends DefaultSimilarity {
@Override
public float coord(int overlap, int maxOverlap) {
return 1.0f;
}
@Override
public float idf(long docFreq, long numDocs) {
return 1.0f;
}
@Override
public float lengthNorm(FieldInvertState arg0) {
return 1.0f;
}
@Override
public float tf(float freq) {
return 1.0f;
}
}
SOLRFOLDER/solr-4.8.0/example/solr/dih
SOLRFOLDER/solr-4.8.0/example/solr/collection/conf/solrconfig.xml
添加
以导入自定义jar<!-- DEFAULT Factory for custom com.luxactive.MyNewSimilarityClass -->
<similarity class="solr.SchemaSimilarityFactory"/>
<!-- TYPE String -->
<fieldType name="no_term_frequency_string" class="solr.StrField" sortMissingLast="true" >
<similarity class="com.luxactive.MyNewSimilarityClass"/>
</fieldType>
<!-- TYPE Date -->
<fieldType name="no_term_frequency_date" class="solr.TrieDateField" sortMissingLast="true" >
<similarity class="com.luxactive.MyNewSimilarityClass"/>
</fieldType>
<!-- TYPE Int-->
<fieldType name="no_term_frequency_int" class="solr.TrieIntField" sortMissingLast="true" >
<similarity class="com.luxactive.MyNewSimilarityClass"/>
</fieldType>
在这里,您可以定义自己的字段类型(int、string和date),它们使用新的相似性类,该类将返回一个类似于MyNewSimilarityClass中定义的提升值
发件人:
收件人:
<!-- DEFAULT Factory for custom com.luxactive.MyNewSimilarityClass -->
<similarity class="solr.SchemaSimilarityFactory"/>
<!-- TYPE String -->
<fieldType name="no_term_frequency_string" class="solr.StrField" sortMissingLast="true" >
<similarity class="com.luxactive.MyNewSimilarityClass"/>
</fieldType>
<!-- TYPE Date -->
<fieldType name="no_term_frequency_date" class="solr.TrieDateField" sortMissingLast="true" >
<similarity class="com.luxactive.MyNewSimilarityClass"/>
</fieldType>
<!-- TYPE Int-->
<fieldType name="no_term_frequency_int" class="solr.TrieIntField" sortMissingLast="true" >
<similarity class="com.luxactive.MyNewSimilarityClass"/>
</fieldType>