【问题标题】:Solr Exact QuerySolr 精确查询
【发布时间】:2014-06-26 09:51:20
【问题描述】:

我正在使用 SolrNet 尝试执行精确查询搜索

我有一个文档,其 URL 存储在 Solr 中:file://C:/Users/me/docs/X%20Item3

我想匹配所有包含“X 项”的文档,所以会寻找一个“X 项”

我有

new SolrQueryByField("url", "*\"X Item\"*");

但这不会返回文档。我也不想将空格字符转换为 %20,但如果 Solr 在解析查询时不会这样做,我可能必须这样做。

帮助赞赏

【问题讨论】:

    标签: solr solrnet


    【解决方案1】:

    默认情况下,Solr 不支持在术语开头进行通配符搜索。您可以通过将ReversedWildcardFilter 添加到字段索引定义来解决此问题。

    根据执行的搜索类型,您还可以拆分 / 以分别索引路径的每个部分,或者只索引文件名。

    您不必将空格转换为 %20,因为这应该由客户端库执行(我不熟悉 SolrNet 是如何做到的,但它确实应该从您那里抽象出来)在制作 HTTP 时请求。

    【讨论】:

    • 以通配符开头的通配符查询在哪里记录在默认情况下不起作用?
    • 最后注:Query Parser Syntax。这也是大多数索引工作方式的自然限制。
    • 问题是 localhost:8983/solr/collection1/select?q=* 返回与 localhost:8983/solr/collection1/select?q=*:* 相同数量的文档,并查看 lucene 中 WildcardQuery 的代码我没有看到强制执行的注释
    • @omu_negru 我想指出单个 * 与 * 不同并且可以是快捷方式,但是是的,当前文档已被撕裂:它说它不是支持,以及改为说“不应该以..开头”。看来现在应该可以了。 (顺便说一句:使用通配符扩展的决定是解析器,它现在检查是否有可用的反向版本)
    • * 是一个可以匹配任何内容的通配符查询,所以如果你真的想在查询解析器中优化它,你可以只返回一个 : 匹配所有文档查询,但是并非所有查询解析器都会这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2011-02-07
    • 2013-10-07
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多