我正在开发rails应用程序,它基于Apache Solr搜索引擎,我们使用的是Sunspot gem。但是我遇到了一个问题,如果我搜索查询house rent
,那么它会使用and query
为我提供数千个结果。但是我得到的结果并不重要。
我期待包含房子和租用文字的文件彼此接近,这些文件应该是最重要的。但是目前包含更多房屋和租赁文件的文件正在排在首位。但是没有任何接近的词。
我的schema.xml包含以下定义:
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="[\s,\.;\(\)]+"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
要实现这一目标,需要做哪些改变?或者为此添加任何过滤器?
答案 0 :(得分:0)
你可以试试这个
<fieldType name="shingleString" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory" outputUnigrams="true" outputUnigramIfNoNgram="true" maxShingleSize="99"/>
<filter class="solr.PositionFilterFactory" />
</analyzer>
</fieldType>
答案 1 :(得分:0)
使用词组字段并提升它们,或者您可以尝试像"house rent"~5