使用Solr 6.6.4,我有一个使用solr.TextField和包含此令牌生成器的分析器的架构:solr.PathHierarchyTokenizerFactory
<fieldType name="filepath_string" class="solr.TextField">
<analyzer>
<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
</analyzer>
</fieldType>
<field name="filepath" type="filepath_string" omitNorms="true" indexed="true" stored="true" required="false" multiValued="false"/>
当我使用标准过滤器查询来查询该字段时:
http://192.168.0.200:8983/solr/groundtruth/select?fq=filepath:/files/AI&indent=on&q=*:*&wt=json
我收到一条消息"invalid number: AI"
如果我使用原始过滤器查询,它似乎可以工作:
http://192.168.0.200:8983/solr/groundtruth/select?fq={!raw f=filepath}/files/AI&indent=on&q=*:*&rows=0&wt=json
这是失败时堆栈跟踪的顶部:
org.apache.solr.common.SolrException: Invalid Number: AI
at org.apache.solr.schema.TrieField.readableToIndexed(TrieField.java:455)
at org.apache.solr.schema.FieldType.getFieldQuery(FieldType.java:776)
at org.apache.solr.schema.TrieField.getFieldQuery(TrieField.java:414)
at org.apache.solr.parser.SolrQueryParserBase.rawToNormal(SolrQueryParserBase.java:906)
at org.apache.solr.parser.SolrQueryParserBase.getBooleanQuery(SolrQueryParserBase.java:595)
at org.apache.solr.parser.QueryParser.Query(QueryParser.java:237)
at org.apache.solr.parser.QueryParser.TopLevelQuery(QueryParser.java:130)
at org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:211)
at org.apache.solr.search.LuceneQParser.parse(LuceneQParser.java:53)
at org.apache.solr.search.QParser.getQuery(QParser.java:168)
at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:208)
奇怪的是,我们在其他情况下使用此字段类型定义没有错误,唯一的区别是在这些情况下,我们使用了不同的定界符(“ |”)。
这是预期的行为吗?