我正在使用SOLRJ(与SOLR 7一起使用),并且索引具有文档内容的某些字段,这些字段名为content_eng,content_ita,...
它还具有一个具有文档完整路径的字段(由StandardTokenizer
和WordDelimiterGraphFilter
处理)。
由于以下几行,用户可以在content_xyz字段中进行搜索: 最终的SolrQuery查询= new SolrQuery(); query.setQuery(searchedText); query.set(“ qf”,searchFields); // searchFields是一个生成的字符串,看起来像“ content_eng content_ita”(字段名称用空格分隔)
现在,用户需要能够指定路径中包含的某些单词(即某些子目录)。所以我添加了filterQuery:
query.addFilterQuery(
"full_path_split:" + searchedPath);
如果searchedPath仅包含文档路径中包含的单个单词,则可以正确返回文档,但是如果searchedPath包含路径中包含多个单词,则不返回文档。概括起来,只有当searchedPath包含单个单词时,fq才有效。
例如doc1位于/home/user/dir1/doc1.txt
如果我搜索用户目录(fq=full_path_split%3Adir
)doc1.txt中的所有(* searchedText中的*)文档,则返回
如果我进行相同的搜索,但未查找用户和dir1(fq=full_path_split%3user+dir1
)中的文档,则不会返回doc1.txt,我认为这是因为fq被解析为“ + full_path_split:user + < em> text :dir1”显示为debug=query
。我不知道 text 的来源可能是默认字段。
那么可以使用带有几个单词的过滤查询来满足我的需求吗?
任何帮助表示赞赏,
答案 0 :(得分:1)
您的怀疑是正确的-_text_:dir1
部分来自您未提供字段名,而是使用默认字段名。
您可以通过使用更通用的edismax
(或更旧的dismax
)解析器来解决此问题,就像使用qf
在主查询中一样:
fq={!type=edismax qf='full_path_split'}user dir1