是否可以在 SOLRJ / SOLR 的过滤器查询中使用多个单词?
Is it possible to use multiple words in a filter query in SOLRJ / SOLR?
我正在使用 SOLRJ(带有 SOLR 7)并且我的索引包含一些名为 content_eng、content_ita、... 的文档内容字段
它还具有一个包含文档完整路径的字段(由 StandardTokenizer
和 WordDelimiterGraphFilter
处理)。
由于以下行,用户能够在 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
我正在使用 SOLRJ(带有 SOLR 7)并且我的索引包含一些名为 content_eng、content_ita、... 的文档内容字段
它还具有一个包含文档完整路径的字段(由 StandardTokenizer
和 WordDelimiterGraphFilter
处理)。
由于以下行,用户能够在 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