特殊字符( - &+等)在SOLR查询中不起作用

Ani*_*nti 3 solr

我正在使用"text_general"fieldType在SOLR中进行搜索.在搜索特殊字符时,我没有得到正确的结果并且出错.我想使用这样的特殊字符:

  1. -
  2. &
  3. +

询问

  1. solr?q=Healing - Live

  2. solr?q=Healing & Live

错误信息

客户端发送的请求在语法上是不正确的(org.apache.lucene.queryParser.ParseException:无法解析'("Healing \':第1行第8列的Lexical错误.遇到:after:"\"Healing \").

schema.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"/>
Run Code Online (Sandbox Code Playgroud)

jav*_*nna 8

您需要转义查询,因为短划线是lucene查询中的特殊字符.看一看,你应该逃避其他字符在这里,并在这里,如果你想知道更多关于Lucene的查询语法.

您的查询将如下所示: solr?q=Healing \- Live

我不知道您使用哪种语言编写代码,但如果您使用的是Java solrj,则提供ClientUtils#escapeQueryChars方法.