在Lucene的查詢語法,我想結合*和〜類似有效的查詢: BLA〜* //無效的查詢Lucene查詢:bla〜*(匹配的單詞以模糊的東西開頭),怎麼樣?
含義:請匹配以「喇嘛」開頭的單詞或類似的東西「喇嘛」。
更新: 我現在所做的工作,適用於小的輸入,是使用以下(SOLR模式的片段):
<fieldtype name="text_ngrams" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
如果你不使用SOLR,這做了以下。
索引時間:通過創建包含我的(短)輸入的所有前綴的字段索引數據。
搜索時間:僅使用〜運算符,因爲索引中明確存在前綴。
Althoug模糊搜索不會在一個固定數目的字符操作,我的情況簡單地使用〜(以字符數爲大差異)不會工作。我想匹配例如Sunla到Sundlaugarvegur。 – 2010-04-13 19:56:14
當然,如果我能告訴lucene只匹配索引中每個單詞的前x個字符,使用〜會工作... – 2010-04-13 20:04:07
你需要超越Lucene在這裏,使用字符串比較算法,如Levenstein,Jaro -Winkler etc.(qv。below) – Mikos 2010-04-14 13:33:08