Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 在SOLR中,如何在用户提供的搜索查询中查询以查找索引关键字?_Search_Solr_Jetty_Contains - Fatal编程技术网

Search 在SOLR中,如何在用户提供的搜索查询中查询以查找索引关键字?

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`, '%');

我运行的是Solr3.6,文档中有索引的标记。当用户输入搜索短语时,我希望能够找到包含在该查询中的标记的文档

例如,用户搜索“任何标记了船只的文档”时,会匹配标记为“船只”的文档

我知道您可以进行通配符搜索,但我需要应用于solr字段的通配符,而不是搜索查询

与此等效的MySQL将是:

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=*,分数
以查看分数)。匹配最大标签的文档得分最高,只有一个标签匹配的文档得分最低。