我正在使用“text_general”fieldType 在 SOLR 中进行搜索。在使用特殊字符进行搜索时,我没有得到正确的结果并出现错误。我想使用这样的特殊字符:
-
&
+
Query
solr?q=Healing - Live
solr?q=Healing & Live
错误信息
客户端发送的请求在语法上不正确
(org.apache.lucene.queryParser.ParseException: 无法解析 '("正在修复
\':第 1 行第 8 列出现词法错误。遇到:之后:
“\“康复 \”)。
模式.xml
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="title" type="text_general" indexed="true" stored="true" />
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
<defaultSearchField>text</defaultSearchField>
<copyField source="title" dest="text"/>
您需要转义查询,因为破折号是 lucene 查询中的特殊字符。看看你应该逃脱的其他角色here https://lucene.apache.org/core/3_6_0/queryparsersyntax.html#Escaping%20Special%20Characters, and here http://www.lucenetutorial.com/lucene-query-syntax.html如果你想了解更多关于 lucene 查询语法的信息。
您的查询将如下所示:solr?q=Healing \- Live
我不知道你用哪种语言编写代码,但如果你使用 Java solrj 提供ClientUtils#escapeQueryChars http://lucene.apache.org/solr/api-4_0_0-BETA/org/apache/solr/client/solrj/util/ClientUtils.html#escapeQueryChars%28java.lang.String%29 method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)