我正在使用EdgeNGrams 与Solr进行自动完成搜索.如果用户正在搜索员工的姓名,则应该应用自动完成.也就是说,我希望结果就像Google搜索一样.它适用于某些搜索.
档案schema.xml
:
<fieldType name="edgytext" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="15" side="front" />
</analyzer>
Run Code Online (Sandbox Code Playgroud)
<field name="title" type="edgytext" indexed="true" stored="true" omitNorms="true" omitTermFreqAndPositions="true"/>
<field name="empname" type="edgytext" indexed="true" stored="true" omitNorms="true" omitTermFreqAndPositions="true" />
<field name="autocomplete_text" type="edgytext" indexed="true" stored="false" multiValued="true" omitNorms="true" omitTermFreqAndPositions="false" />
<copyField source="empname" dest="autocomplete_text"/>
<copyField source="title" dest="autocomplete_text"/>
Run Code Online (Sandbox Code Playgroud)
http://local:8080/test/suggest/?q=michael
Run Code Online (Sandbox Code Playgroud)
结果:
<?xml version="1.0" encoding="UTF-8" ?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int …
Run Code Online (Sandbox Code Playgroud) 我正在使用"text_general"fieldType在SOLR中进行搜索.在搜索特殊字符时,我没有得到正确的结果并且出错.我想使用这样的特殊字符:
-
&
+
solr?q=Healing - Live
solr?q=Healing & Live
客户端发送的请求在语法上是不正确的(org.apache.lucene.queryParser.ParseException:无法解析'("Healing \':第1行第8列的Lexical错误.遇到:after:"\"Healing \").
<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)