2010-04-13 139 views
18

我想配置我的Solr搜索引擎,以便我輸入的搜索字詞具有完全匹配。Solr精確搜索字詞

例如。 '納稅'應該返回文件'稅',而不是'稅','稅收'等。

任何幫助或提示,將不勝感激。

回答

21

我認爲你的領域是一個TextField,默認情況下solr在這個領域做了模糊搜索。你想要的是將你的領域設置爲一個字符串字段,並不添加標記器,那麼你會得到一個完全匹配。

您甚至可以將精確搜索與模糊搜索相結合,並使用DisMax來提高相對權重。

例(schema.xml中):

<field name="name"    type="string" indexed="true" stored="false" required="true" /> 
<field name="nameString"  type="string" indexed="true" stored="false" required="true" /> 
<copyField source="name" dest="nameString"/> 

例(solrconfig.xml中):

<requestHandler name="accounts" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="defType">dismax</str> 
     <str name="qf"> 
     nameString^10.0 name^5.0 description^1.0 
     </str> 
     <str name="tie">0.1</str> 
    </lst> 
    </requestHandler> 
+4

這是可能的查詢時,與一個特殊的運營商? Like = taxes – mlissner 2011-04-02 21:55:04

+0

@mlissner,上面的XML僅僅是添加到查詢中的默認參數。你可以通過添加你的查詢defType = dismax&qa = nameString^10.0 name^5.0 description^1.0 etc etc – 2012-09-28 19:29:04

+0

@ItayMoav,目標是讓*用戶*能夠放置完全匹配查詢。 – mlissner 2012-09-28 23:52:37

4

關閉stemming

+1

感謝漢克,也許我應該更恰當地表述我的問題,我如何禁用詞幹? :) – Ruth 2010-04-13 16:00:48

+2

使用textgen字段類型並重新索引,做伎倆 – Ruth 2010-04-13 16:39:29

+0

請參閱http://lucene.472066.n3.nabble.com/Exact-match-on-a-field-with-stemming-tt2808086.html#a2809293 – 2011-09-29 13:34:19

3

要關閉在schema.xml中所產生,你可以這樣定義文本字段:

<types> 

    <!-- other fields definition --> 

    <fieldType name="text_no_stem" class="solr.TextField" omitNorms="false"> 
     <analyzer> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.StandardFilterFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <!-- other fields definition --> 

</types> 

<fields> 

    <!-- other fields definition --> 

    <dynamicField name="*_nostem" type="text_no_stem" indexed="true" stored="true"/> 

    <!-- other fields definition --> 

</fields> 

我使用sunspot將solr與Ruby on Rails集成。有了這個schema.xml中,我定義我的搜索塊這樣的:

searchable do 
    text(:wants, as: :wants_nostem) 
end 
1

使用Solr的串場whcih會做一個精確值搜索例如

<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />