【问题标题】:Solr - searches using two or more words only use first word for scoringSolr - 使用两个或多个单词的搜索仅使用第一个单词进行评分
【发布时间】:2014-05-11 15:33:16
【问题描述】:

当我发出查询时

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

一切正常 - 包含两个搜索词的文档按预期得分更高。

为什么使用/select处理程序对文档评分时查询q=fulltext:marina zadar与其他示例不同?

这是我的 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>

【问题讨论】:

标签: search solr


【解决方案1】:

事实证明,这些词需要用括号括起来。如果我发出

q=全文:(码头扎达尔)

这两个词都用于文档的评分,结果按预期排序。发出q=fulltext:marina zadar 在指定的“全文”字段中查找单词“marina”,并在为solrconfig.xml 中使用的查询处理程序设置为默认值的字段中查找单词“zadar”。

这可能是一个新手错误,但也许它会在未来帮助某人。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多