【问题标题】:Searching in SOLR fields that dont exist在不存在的 SOLR 字段中搜索
【发布时间】:2014-12-20 22:44:20
【问题描述】:

所以我的用户有一些字段,例如 [字段 A] 和 [字段 B]。字段可以为空或不存在(用户不会添加任何内容)。

现在我的查询是这样的:

字段 A:绿色

Solr 给我 100 个拥有绿色领域的用户。

我想从这 100 个用户中过滤出一些提升

字段A:绿色和 (字段B:蓝色或字段B:*)

它不会给我所有带有蓝色的字段或所有在此字段中有内容的字段。但我也想要没有这个领域的人。

我试试:

字段A:绿色和 (FieldB:蓝色 OR FieldB:* OR (-FieldB:*))

但它不起作用

【问题讨论】:

  • 那么您希望每个文档在 FieldB 中都有 somethingnothing 吗?为什么还要查询FieldB
  • 是的。确切地。我想在这个que中拥有一些东西或什么都没有。我想要的结果与我通过 FieldA 过滤的结果完全相同。字段 B 仅用于对它们进行排序
  • 那么你为什么要按 FieldB 过滤?不用管它。
  • 我不想错过。例如:我有两个字段名称和姓氏。现在我想过滤有名字和姓氏的人这个查询不会给我有名字但没有姓氏的人
  • FieldA:Green AND (.. anything or nothing in FieldB)FieldA:Green 相同。您必须扩展您的问题并解释为什么这是一种不同的情况以及为什么它不能解决您尝试做的事情。

标签: solr


【解决方案1】:

您为什么不尝试为 empty 字段保存一个固定值。

所以你可以: 字段A:蓝色 字段B:0

然后简单查询 字段 A:绿色 AND(字段 B:蓝色 OR 字段 B:0)

您也可以将 FieldB:* 切换为 FieldB:[* TO *]

【讨论】:

    【解决方案2】:

    好吧,也许我会再次解释我的问题:

    我有两个字段:姓名和姓氏。我有 10 条姓名为:BOB 的记录和 3 条姓氏为:SMITH 的记录

    第一个 i 过滤器:

    name:BOB 和查询给了我 10 条记录。

    现在我想过滤所有是 Bob Smith 的人,然后我想要名字为 bob 的人(名字 BOB 是强制性的)然后我想要在姓氏字段中有其他东西的人。

    所以我的查询看起来像这样:

    name:BOB AND (surname:SMITH^3 or surname:^0) - 这给了我名字必须是 bob 的人,首先是姓 smith 的人,然后是其他价值观的人。但是“姓:”不要给我空字段的人。所以我尝试做 (-surname:*^0) 但它没有用。

    现在,只有名字 BOB 但没有任何姓氏的人会被禁止搜索结果

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2011-11-06
      • 2012-11-10
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多