apache - Solr查询精确匹配和部分匹配搜索查询

标签 apache search solr solr4

我必须搜索一些完全匹配和部分匹配的文档。 举个例子:我有标题为“ABC-01 CAB 现在正忙。ABCDE CAB 可用”的文档。我想搜索 ABC-01 高分(与标题中的搜索词完全匹配) 另外我想搜索包含 ABC-01 的文档。另外,它应该根据分数和日期按降序排序。 还有另一个字段称为 driver 。搜索还应该搜索分数低于标题完全匹配或部分匹配的驱动程序字段。

(请注意精确匹配搜索仅“ABC-01”而不是“ABC-010”) 有任何线索吗?

  • id:ABC-01
  • 标题:ABC-01 出租车现在正忙。 ABCDE 出租车可用
  • 加入日期:2016-01-10

  • id:ABC-010
  • 标题:ABC-001010 可用
  • 加入日期:2016-01-12
  • 驱动程序:ABCMAN


  • id:XYZ-05

  • 标题:XYZ-05 CAB 可用,ABC-01-XE 可用
  • 加入日期:2015-01-12 驱动器:ABCD MAN ABC-01

  • id:ABC-07
  • 标题:ABC-07 可用 ABC-01-XE
  • 加入日期:2015-01-12
  • 驱动程序:CD MAN ABC-05

对于这个例子 如果我搜索 ABC-01

- 我想要以下结果

  • id:ABC-01
  • 标题:ABC-01 可用
  • 加入日期:2016-08-12
  • 司机:ABCMAN

  • id:XYZ-05
  • 标题:XYZ-05 CAB 可用,ABC-07 可用
  • 加入日期:2015-01-12
  • 驱动程序:ABCD MAN ABC-01

  • id:ABC-07
  • 标题:ABC-07 可用 ABC-01-XE
  • 加入日期:2015-01-11
  • 驱动程序:CD MAN ABC-05

如果搜索词与标题完全匹配,那么它应该获得高分。 或者如果不是,则应搜索标题字段包含 ABC-01 或 abc-01-xe 或包含 abc-01 的任何内容。 它还应该搜索驱动程序字段以查找给定术语的任何相关驱动程序。

结果应根据分数和日期排序。 此外,精确匹配的最近日期应首先与订单一起显示。

最佳答案

您在这里有几个问题。

您可以使用eDisMax搜索多个字段,并对不同字段赋予不同的权重进行排序。

您可以按混合得分和日期的函数查询进行排序,然后进行实验,直到获得正确的组合。

将 ABC-01-xe 与 ABC-01 匹配有点困难,因为不清楚您的意思。它将是某种索引时间分析器链元素,但哪一个取决于映射的具体情况。 ABC-01-ANYTHING 是否映射到 ABC-01,或者它必须具体是 ABC-01-xe。 ABC-01234 怎么样?您需要首先获取此映射的业务规则,然后努力确保 - 在索引时间分析器链的末尾 - 您得到了您想要的东西。您可能还希望对具有相同信息的两个字段进行不同的处理,而处理较少的一个字段(例如 ABC-01 精确)具有较高的权重。

关于apache - Solr查询精确匹配和部分匹配搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40163012/

相关文章:

apache - 无法通过 UBUNTU 12.10 上的本地 IP 地址访问 Web 服务器

regex - 我可以禁用特定目录的重写吗?

algorithm - bing背后的技术是什么?它自己的 map-reduce 算法版本还是其他?

python - 在文本文件中匹配 id 并检索相应值的更快方法

java - 如何在SOLR中处理突出显示片段中的html标签

java - 用于 SDL Tridion 2011 的 Java 部署程序扩展的原型(prototype)或方法,用于将内容索引到 Apache Solr

solr - 多个 SOLR war 文件共享同一个 solr_home 是错误的吗?

Apache-.htaccess

apache - 使用 Subversion 1.8+ 客户端提交时出现错误 "The server sent an improper HTTP response."

javascript - 我想返回一个对象,但我得到一个字符串