我必须搜索一些完全匹配和部分匹配的文档。 举个例子:我有标题为“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/