是否可以在 SOLRJ / SOLR 的过滤器查询中使用多个单词?

Is it possible to use multiple words in a filter query in SOLRJ / SOLR?

我正在使用 SOLRJ(带有 SOLR 7)并且我的索引包含一些名为 content_eng、content_ita、... 的文档内容字段 它还具有一个包含文档完整路径的字段(由 StandardTokenizerWordDelimiterGraphFilter 处理)。

由于以下行,用户能够在 content_xyz 字段中进行搜索: 最终 SolrQuery 查询 = new SolrQuery(); query.setQuery(搜索文本); query.set("qf",searchFields); // searchFields 是一个生成的字符串,看起来像 "content_eng content_ita"(字段名称由 space 分隔)

现在用户需要能够指定路径中包含的一些词(即一些子目录)。所以我添加了一个 filterQuery :

query.addFilterQuery(
                "full_path_split:" + searchedPath);

如果 searchedPath 仅包含文档路径中包含的单个单词,则正确返回文档,但是如果 searchedPath 路径中包含多个单词,则不会返回文档。总而言之,fq 仅在 searchedPath 包含单个单词时才有效。

例如 doc1 在 /home/user/dir1/doc1.txt

如果我搜索用户目录 (fq=full_path_split%3Adir) 中的所有(* in searchedText)文档,将返回 doc1.txt。

如果我进行相同的搜索,但对于 user 和 dir1 (fq=full_path_split%3user+dir1) 中的文档,则不会返回 doc1.txt,我认为这是因为 fq 被解析为“+full_path_split:user +text:dir1" 如 debug=query 所示。我不知道 text 的来源,它可能是默认字段。

那么是否可以使用包含多个词的筛选查询来满足我的需求?

感谢任何帮助,

您的怀疑是正确的 - _text_:dir1 部分是因为您没有提供字段名称,而是使用了默认字段名称。

您可以使用更通用的 edismax(或较旧的 dismax)解析器解决此问题,就像您在主查询中使用 qf:

fq={!type=edismax qf='full_path_split'}user dir1