我正在使用apache-solr-3.4.0。我可以使用单个单词进行搜索,但不能使用多个单词进行搜索。例如:jobTitle:tester
产生结果,但是jobTitle:java developer
不返回任何结果。
在我的 schema.xml 中,我为文本字段类型添加了以下代码:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize= "5"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="5"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
答案 0 :(得分:1)
您有几种选择,按易用性排序
(
和)
,这些部分应转到一个字段进行分组,例如jobTitle:(java developer)
。 不要只是在引号"
周围加上引号,这会作为短语查询执行,但有所不同。{!df=jobTitle}java developer
。这将使查询的所有部分都转到该字段。 背景
想象一下,Solr将您的搜索查询分为每个空白的部分(实际上并不是那么简单,但是对于开始来说已经足够了)。每个部分都针对分配的字段或默认字段进行处理。取自Solr's manual
该字段仅对紧接其后的术语有效,因此查询 title:Do it right (查询:正确执行)将在title字段中仅找到“ Do”。它将在默认字段(在本例中为文本字段)中找到“ it”和“ right”。
答案 1 :(得分:0)
Solr还有一个NGramFilterFactory
。 N-gram filter。尝试不使用ngram标记程序。我建议使用“ WhitespaceTokenizer
”,然后应用ngram过滤器。
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="3" />
您的字段类型应如下所示:
<fieldType name="text_custom" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="10" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>