【问题标题】:Solr wrong sort text fieldsSolr 错误排序文本字段
【发布时间】:2011-12-20 23:17:01
【问题描述】:

我在 schema.xml 中有“text_general”字段

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/><filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

我已存储文件:

document1:
   spell = "contro un indice generale dei prezzi salito del 2, 1%. Rincari ben piщ evidenti, tra i prodotti da bar"
   testata = "Mattino di Padova (Il)"

document2:
   spell="con i prodotti di qualitа vinco la crisi dei consumi Farinetti: con"
   testata = "Italia Oggi"

document3
   spell = "convenienza Il 2008 porta i primi aumenti nei pre zi L'Ipercoop cresce il listino"
   testata = "Nuova Ferrara (La)"

“spell”和“testata”字段具有“text_general”类型。

搜索对我来说工作正常:

http://localhost:8080/solr/select?q={!type=edismax qf=spell v='co*'}

但是排序存在一些问题:

http://localhost:8080/solr/select?q={!type=edismax qf=spell v='co*'}&sort=testata desc

它返回给我这个结果:

    document1:
       spell = "contro un indice generale dei prezzi salito del 2, 1%. Rincari ben piщ evidenti, tra i prodotti da bar"
       testata = "Mattino di Padova (Il)"

    document2:
       spell="con i prodotti di qualitа vinco la crisi dei consumi Farinetti: con"
       testata = "Italia Oggi"

    document3
       spell = "convenienza Il 2008 porta i primi aumenti nei pre zi L'Ipercoop cresce il listino"
       testata = "Nuova Ferrara (La)"

我不明白为什么我的排序工作不正常。它应该像这样返回我的结果:

    document3
       spell = "convenienza Il 2008 porta i primi aumenti nei pre zi L'Ipercoop cresce il listino"
       testata = "Nuova Ferrara (La)"

    document1:
       spell = "contro un indice generale dei prezzi salito del 2, 1%. Rincari ben piщ evidenti, tra i prodotti da bar"
       testata = "Mattino di Padova (Il)"

    document2:
       spell="con i prodotti di qualitа vinco la crisi dei consumi Farinetti: con"
       testata = "Italia Oggi"

【问题讨论】:

    标签: search sorting solr edismax


    【解决方案1】:

    排序不适用于多值和标记化字段。
    由于testata 已使用text_general 字段类型定义,它将被标记化,因此排序将无法正常工作。

    排序可以在文档的“分数”上进行,也可以在任何 multiValued="false" indexed="true" 字段,前提是该字段是 非标记化(即:没有分析器)或使用仅 生成单个 Term(即:使用 KeywordTokenizer)

    来源:http://wiki.apache.org/solr/CommonQueryParameters#sort

    使用string作为字段类型并将title字段复制到新字段中。

    <field name="testata_sort" type="string" indexed="true" stored="false"/>
    
    <copyField source="testata" dest="testata_sort" />  
    

    【讨论】:

    • +1。这就是我最终在多值字段上启用“排序”的方法:让每个人的第一个值在相应的字符串字段中重复,然后对这些字段进行排序。
    • 谢谢!我使用的是“部分匹配”字段类型,无法弄清楚为什么我的结果返回完全未排序。切换到常规文本字段修复了这个问题:)
    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    相关资源
    最近更新 更多