Search 在SOLR中,如何在用户提供的搜索查询中查询以查找索引关键字?
我运行的是Solr3.6,文档中有索引的标记。当用户输入搜索短语时,我希望能够找到包含在该查询中的标记的文档 例如,用户搜索“任何标记了船只的文档”时,会匹配标记为“船只”的文档 我知道您可以进行通配符搜索,但我需要应用于solr字段的通配符,而不是搜索查询 与此等效的MySQL将是:Search 在SOLR中,如何在用户提供的搜索查询中查询以查找索引关键字?,search,solr,jetty,contains,Search,Solr,Jetty,Contains,我运行的是Solr3.6,文档中有索引的标记。当用户输入搜索短语时,我希望能够找到包含在该查询中的标记的文档 例如,用户搜索“任何标记了船只的文档”时,会匹配标记为“船只”的文档 我知道您可以进行通配符搜索,但我需要应用于solr字段的通配符,而不是搜索查询 与此等效的MySQL将是: SELECT * FROM `documents` WHERE "Any document that has boats tagged" LIKE 'CONCAT('%', `document`, '%');
SELECT * FROM `documents` WHERE "Any document that has boats tagged" LIKE 'CONCAT('%', `document`, '%');
因此,我需要一个SOLR工厂来允许这种类型的查询:
*document*:"Any document that has boats tagged"
如果Solr中的
标记
字段在索引时间和查询时间内都是一个带小写FilterFactory的多值文本字段,那么您只需发出以下查询:
q=tags:(Super fast boats)
(我在这里更改了您的示例。)这将首先给出包含所有3个标记的文档(如果有),然后是包含2个标记(如果有)和1个标记的文档
这是假设在schema.xml中您得到了
。如果您有AND,则需要用或来分隔单词,如:
q=tags:(any OR document OR that OR has OR boats OR tagged)
(您可能还希望对标记和查询使用词干分析来匹配更多的标记,但这是您需要试验和决定的。)这很有帮助,但是如果标记字段可以是多个单词怎么办。因此,对“超级快艇”的查询应该匹配标记为“超级快艇”和“快艇”的文档,但不应该匹配标记为“快速”的文档。然后,您需要在调用Solr之前构造Solr查询,如:q=tags:((“超级快艇”或“快艇”)和-fast)
。这意味着你的应用程序知道所有的标签名,这可能是不可行的。另一种方法是查看返回文档的分数(添加请求参数fl=*,分数以查看分数)。匹配最大标签的文档得分最高,只有一个标签匹配的文档得分最低。