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

时间:2019-12-03 14:10:38

标签: solr solrj

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

由于以下几行,用户可以在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 的来源可能是默认字段。

那么可以使用带有几个单词的过滤查询来满足我的需求吗?

任何帮助表示赞赏,

1 个答案:

答案 0 :(得分:1)

您的怀疑是正确的-_text_:dir1部分来自您未提供字段名,而是使用默认字段名。

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

fq={!type=edismax qf='full_path_split'}user dir1
相关问题