【发布时间】:2014-05-02 13:33:58
【问题描述】:
我为特定字段类型的查询和索引设置了以下分析器。它应该拆分诸如 "java/cpp" => "java" "cpp" 之类的术语,即由于我在 schema.xml 中定义的 PatternTokenizer 而产生的 2 个令牌。这在索引时正确应用,但在查询时不正确。在 Solr 中使用分析仪 GUI 测试仪进行测试,它似乎工作正常。这是分析器链的开始:
<analyzer type="query">
<!-- Collapse hyphens around alpha words -->
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="([a-zA-Z])(-+)([a-zA-Z])"
replacement="$1$3"/>
<charFilter class="solr.PatternReplaceCharFilterFactory"
pattern="([0-9])(,)([0-9])"
replacement="$1$3"/>
<!-- Else Split on hyphens (numbers, etc), plus other splitable chars -->
<tokenizer class="solr.PatternTokenizerFactory" pattern="([\\*/\),\(\-]|\s)+" />
...........
</analyzer>
如果我发送如下查询:
其中 q(查询)参数设置为:java/cpp(无引号),并且查询字段 (qf) 指向该字段类型(标题)的字段,debugQuery 选项在响应中显示以下内容:
<lst name="debug">
<str name="rawquerystring">java/cpp</str>
<str name="querystring">java/cpp</str>
<str name="parsedquery">(+DisjunctionMaxQuery((title:"java cpp")~1.0))/no_coord</str>
<str name="parsedquery_toString">+(title:"java cpp")~1.0</str>
因此,尽管我发送的查询中省略了引号,但它似乎将 java/cpp 作为短语查询发送。它似乎正在应用我的 schema.xml 中的其他分析器转换,但它似乎没有适当地标记查询中的单词。由于上面定义的 PatternTokenizerFactory,它应该将其分为两个术语。难道我做错了什么?
【问题讨论】:
-
为什么这被否决了?这对我来说是个大问题。如果有人投反对票,请让发帖者知道原因,以便他们了解原因并从中学习。
标签: java solr lucene information-retrieval solr4