【问题标题】:Solr - unexpected sorting order and sortMissingLastSolr - 意外的排序顺序和 sortMissingLast
【发布时间】:2023-03-28 20:13:01
【问题描述】:

我的text 类型定义如下:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.KeywordTokenizerFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
    ...

还有几个使用给定类型的字段。其中一个字段是title 字段,该字段始终已定义且不会丢失,对于任何文档也不会为空。但是,当按此字段排序时,ascdesc Solr 将按给定顺序返回文档,而是看似随机的。只有在类型声明中添加sortMissingLast="true" 后,排序才能正确。

谁能向我解释为什么会这样?据我了解,sortMissingLast 在使用排序时不应该生效,因为 a)它与文档的插入有关 b)我的集合中的所有文档都定义了这个字段。

进一步阅读:

If sortMissingLast="true", then a sort on this field will cause documents without the field to come after documents with the field, regardless of the requested sort order (asc or desc).

我确实有其他字段使用相同的text 类型,但是它们都存在。它们可能是空的,但它们存在于文档中。

【问题讨论】:

    标签: sorting solr


    【解决方案1】:

    我用您的fieldType 测试了一个样本索引,即text。当我尝试使用title asc 时,我的结果低于响应

        "responseHeader":{
            "status":0,
            "QTime":1,
            "params":{
              "sort":"title asc",
              "indent":"true",
              "q":"*:*",
              "wt":"json"}},
          "response":{"numFound":10,"start":0,"docs":[
              {
                "id":["123"],
                "title":"awesome designs_takeaway",
                "lastmodified":"f75a2e26-cb41-4028-abb2-bcd7f61e4f9e",
                "_version_":1538551521252212736},
              {
                "id":["124"],
                "title":"breathtaking_designs takeaway",
                "lastmodified":"170b3857-d906-44df-950c-547c25b4e594",
                "_version_":1538551543494606848},
              {
                "id":["125"],
                "title":"curtain raiser",
                "lastmodified":"ea7149d5-449f-4d69-919b-617b90420381",
                "_version_":1538573292313509888},
              {
                "id":["126"],
                "title":"defying gravity_008",
                "lastmodified":"82844b75-24ba-4b2f-be20-9bb3fe83e6b1",
                "_version_":1538551590630195200},
              {
                "id":["127"],
                "title":"emancipation_of the poor",
                "lastmodified":"d19482a5-1666-4d4e-a40e-eb93c00eca7e",
                "_version_":1538551627310432256},
              {
                "id":["128"],
                "title":"functioning of the-metadata",
                "lastmodified":"7b07f281-1268-48cc-aee6-7a6636702ba5",
                "_version_":1538551653171462144},
              {
                "id":["130"],
                "title":"graphics enhancer 101",
                "lastmodified":"67fd79d6-2ae5-4597-b2e1-128bfd815b67",
                "_version_":1538551680471138304},
              {
                "id":["131"],
                "title":"half-hearted attempt",
                "lastmodified":"abb4707c-8392-4595-aaeb-fbf6d4f098b1",
                "_version_":1538551699761790976},
              {
                "id":["132"],
                "title":"INK jet corporation",
                "lastmodified":"b29ba3af-f3da-49d1-bd45-f7d277c53cff",
                "_version_":1538551727666495488},
              {
                "id":["136"],
                "title":"xamarin",
                "filecontent":"bolshevik",
                "lastmodified":"af8a1445-e693-4bac-9ac8-84fa2c9b838d",
                "_version_":1538571040880328704}]
          }}`
    

    当我尝试使用title desc 时。

    我的回应

    `{
      "responseHeader":{
        "status":0,
        "QTime":1,
        "params":{
          "sort":"title desc",
          "indent":"true",
          "q":"*:*",
          "wt":"json"}},
      "response":{"numFound":10,"start":0,"docs":[
          {
            "id":["136"],
            "title":"xamarin",
            "filecontent":"bolshevik",
            "lastmodified":"af8a1445-e693-4bac-9ac8-84fa2c9b838d",
            "_version_":1538571040880328704},
          {
            "id":["132"],
            "title":"INK jet corporation",
            "lastmodified":"b29ba3af-f3da-49d1-bd45-f7d277c53cff",
            "_version_":1538551727666495488},
          {
            "id":["131"],
            "title":"half-hearted attempt",
            "lastmodified":"abb4707c-8392-4595-aaeb-fbf6d4f098b1",
            "_version_":1538551699761790976},
          {
            "id":["130"],
            "title":"graphics enhancer 101",
            "lastmodified":"67fd79d6-2ae5-4597-b2e1-128bfd815b67",
            "_version_":1538551680471138304},
          {
            "id":["128"],
            "title":"functioning of the-metadata",
            "lastmodified":"7b07f281-1268-48cc-aee6-7a6636702ba5",
            "_version_":1538551653171462144},
          {
            "id":["127"],
            "title":"emancipation_of the poor",
            "lastmodified":"d19482a5-1666-4d4e-a40e-eb93c00eca7e",
            "_version_":1538551627310432256},
          {
            "id":["126"],
            "title":"defying gravity_008",
            "lastmodified":"82844b75-24ba-4b2f-be20-9bb3fe83e6b1",
            "_version_":1538551590630195200},
          {
            "id":["125"],
            "title":"curtain raiser",
            "lastmodified":"ea7149d5-449f-4d69-919b-617b90420381",
            "_version_":1538573292313509888},
          {
            "id":["124"],
            "title":"breathtaking_designs takeaway",
            "lastmodified":"170b3857-d906-44df-950c-547c25b4e594",
            "_version_":1538551543494606848},
          {
            "id":["123"],
            "title":"awesome designs_takeaway",
            "lastmodified":"f75a2e26-cb41-4028-abb2-bcd7f61e4f9e",
            "_version_":1538551521252212736}]
      }}`
    

    如您所见,我得到了预期的结果。我用 Solr v 5.3.2 。您的类型 text 也不会将文本标记为部分,因此是 sorting 的良好候选者。所以没有用这种方式来解决问题。sortMissingLastsortMissingFirst 参数完全用于不同的目的,虽然我确实用它们来复制你的观察结果,但我只看到了预期的结果。正如您所说,您的每个文档都有一个title 字段,所以我在所有文档中也保留了title 字段,因此没有使用sortMissingLastsortMissingFirst 参数,因为它们会影响文档设置其中没有 title 字段的文档,您的结果不应偏离我得到的结果。这只会渗透到推理上,这可能是您的 solr 有错误。如果您使用的版本与我的不同,请在 5.3.2 版本或与您的不同版本上尝试一次您的文档。或者,如果您不怀疑 Solr 存在错误,您是否可以从您这边提供一个被分类为错误的标题子集,以查看它们是如何被分析的。让我知道这是否有帮助:)。

    【讨论】:

    • 这确实可能与 Solr 版本有关——我们使用的是 4.10.1。是的 - 我对sortMissingLastsortMissingFirst 有同样的想法。稍后将在我的版本上尝试您的测试数据,并将返回结果
    • 当然!让我知道结果!顺便说一句,也尝试自己在 solr 5.3.2 版本上测试我的数据,以确认我的观察不是偶然的。在 localhost 上安装和测试新的 solr 版本不会花费您太多时间。同时,我找不到太多证据说明为什么您的 Solr 会表现出这种行为。我自己也会尝试在 solr 4.10.1 上复制我的数据!!
    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多