我是solr的新手,我对查询机制有疑问。
在我的solr schema.xml中,对于特定字段(比如field1),我有一个标准的标记器,可以分成单词和几个过滤器。其中一个过滤器是 solr.KeepWordFilterFactory 过滤器,它有一个极短的字典(只有10个字,比如它们是:红色,橙色,黄色,绿色等)。我用solr的analyze菜单测试了模式,一切正常。
这是一个带有文字“红狐狸坐在绿草地上”的文件。将转换为{“red,”green“}
但是,当我提交查询时:field1:“red green”它找不到这样的文件。好像查询应用于未过滤但已标记化的源。
您能否确认这是标准查询解析器实际执行的操作。即,过滤器专门用于索引,但实际搜索没有?(我知道搜索将仅应用于索引与分析的查询匹配的那些文档)。或者如果不是,在上面的例子中,短语查询的实际效果如何。
答案 0 :(得分:0)
当你进行这样的查询:“red green”时,Lucene希望在连续的位置找到这些术语,所以pos(绿色)= pos(红色)+ 1.当你这样做时:“red green” ~10,你给它10个动作来调整周围的条件并试图使它们看起来连续(它被称为短语slop)。
其他,KeywordMarkerFilter所做的是用关键字flag标记令牌。后面的过滤器可以实现一个逻辑,在修改之前检查令牌是否为关键字。它不会阻止lucene从未标记为关键字的索引标记,但它可以阻止它进一步修改它们。