当我发出查询时
q=fulltext:marina zadar
Solr仅使用“marina”一词来计算文档分数。如果我禁用索引术语频率和位置,则包含单词和仅包含单词“marina”的文档的文档的分数都相同。
这是我使用下面的请求处理程序
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">100</int>
<str name="df">title</str>
</lst>
</requestHandler>
当我将另一个请求处理程序定义为
时<requestHandler name="/full" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">100</int>
<str name="df">fulltext</str>
</lst>
</requestHandler>
并以
的形式向该处理程序发出查询q=marina zadar
一切正常 - 包含两个搜索词的文档按预期得分更高。
为什么使用q=fulltext:marina zadar
处理程序时,查询/select
的评分文档与其他示例不同?
这是我的schma.xml
<schema name="example" version="1.5">
<fields>
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="id" type="long" indexed="true" stored="true" required="true" />
<field name="name" type="string" indexed="true" stored="true" />
<field name="subName" type="string" indexed="false" stored="true" />
<field name="nearName" type="string" indexed="false" stored="true" />
<field name="countryName" type="string" indexed="false" stored="true" />
<field name="title" type="text_general_edge_ngram" indexed="true" stored="false" multiValued="true" />
<field name="fulltext" type="text_general" indexed="true" stored="true" />
</fields>
<uniqueKey>id</uniqueKey>
<copyField source="name" dest="title" />
<copyField source="subName" dest="title" />
<!--<similarity class="com.pocketsail.solr.DescriptionSimilarity" />-->
<types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.LowerCaseTokenizerFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" omitNorms="true" omitTermFreqAndPositions="true">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>
</fieldType>
</types>
</schema>
答案 0 :(得分:4)
事实证明,这些词需要括在括号中。如果我发出
q =全文:( marina zadar)
两个单词用于文档评分,结果按预期排序。发布q=fulltext:marina zadar
会查找&#34; marina&#34;在全文中&#39;指定的字段和单词&#34; zadar&#34;在字段中,该字段设置为solrconfig.xml中使用的查询处理程序的默认值。
这可能是一个新手错误,但也许它将来会帮助某人。