Используя 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
Я получаю SolrException с сообщением "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)
Как ни странно, мы использовали это определение типа поля в других сценариях без ошибок, с той лишь разницей, что в этих сценариях мы используем другой разделитель ("|").
Это ожидаемое поведение?