2012-07-11 83 views
4

我使用Solr和太陽黑子/ dismax。有沒有可能查詢非字母字符?即:太陽黑子/ Solr:非字母字符

~ ! @ # $ %^& * () _ + - = [ ] { } | \

我知道,+/-必須轉義,因爲它們是dismax包含/排除運營商。但我沒有得到任何的比賽,當我搜索的任何字符:

Foo.search { fulltext '=' }.results.length # => 0 
Foo.search { fulltext '\=' }.results.length # => 0 

然而:

Foo.search { fulltext 'a'}.results.length # => 30 

下面是我使用的分詞器配置:

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

你使用什麼標記器?你確定它不會刪除標點符號嗎? – 2012-07-11 19:14:48

+0

用「文本」中使用的標記器更新了我的問題。 – 2012-07-12 01:10:28

回答

3

Solr的StandardTokenizer刪除所有'特殊字符',因爲它優化爲使用純文本。因此,例如'='將不會被找到,因爲它在索引過程中被從文本中剝離。

保留所有字符的標記器之一是WhitespaceTokenizer,它僅在空白處分割輸入。你需要評估它是否能很好地解決你的問題,因爲它會產生這樣的令牌:

20歲的狐狸跳過了懶狗。 - > '20歲','狐狸','跳躍','上','','懶','狗'。

可能發生,你需要提供你自己的標記生成器(不是通過實現一個必要的,你可以定義適當的正則表達式拆分字符,使用PatternTokenizer),或使用過濾器像WordDelimiterFilterPatternReplaceFilter