Solr 错误排序文本字段

发布于 2024-12-13 10:37:33 字数 2693 浏览 0 评论 0原文

我在 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"

I have "text_general" field in schema.xml

<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>

I have stored documents:

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" and "testata" fields has a "text_general" type.

Searching working fine for me:

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

But with sorting exists some problem:

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

It returns me this result:

    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)"

I don`t understand why my sorting working not properly. It should returns me result like this:

    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"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苦笑流年记忆 2024-12-20 10:37:33

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

排序可以根据文档的“分数”进行,也可以根据任何
multiValued="false" indexed="true" 字段,前提是该字段是
非标记化(即:没有分析器)或使用仅分析器
生成单个术语(即:使用 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" />  

Sorting doesn't work good on multivalued and tokenized fields.
As testata has been defined with text_general field type, it will be tokensized and hence the sort would not work fine.

Sorting can be done on the "score" of the document, or on any
multiValued="false" indexed="true" field provided that field is either
non-tokenized (ie: has no Analyzer) or uses an Analyzer that only
produces a single Term (ie: uses the KeywordTokenizer)

Source: http://wiki.apache.org/solr/CommonQueryParameters#sort

Use string as the field type and copy the title field into the new field.

<field name="testata_sort" type="string" indexed="true" stored="false"/>

<copyField source="testata" dest="testata_sort" />  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文