2016-03-04 88 views
0

如何操作發送到Solr的查詢字符串?Solr:操作查詢字符串

例如,有人輸入「stackoverflow-version1.0」,但沒有找到結果。但是,如果查詢只是「stackoverflow」,搜索將會成功。 所以我想截斷「 - 」並再次搜索第一部分。

有些研究把我帶到solr.PatternReplaceCharFilterFactory類。我將它包含在我的schema.xml中。有沒有人看到,爲什麼我的查詢仍然沒有產生任何結果?我應該使用其他課程嗎?

UPDATE: 現在我的代碼看起來如下:

<fieldType name="ngram" class="solr.TextField" omitNorms="true"> 
    <analyzer type="index"> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="1" maxGramSize="20" /> 
    <filter class="solr.WordDelimiterFilterFactory" 
     generateWordParts="1" 
     splitOnNumerics="0" 
     generateNumberParts="0" 
     catenateWords="0" 
     catenateNumbers="0" 
     catenateAll="0" 
     preserveOriginal="1" 
    /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" 
     generateWordParts="1" 
     generateNumberParts="0" 
     splitOnNumerics="0" 
     catenateWords="0" 
     catenateNumbers="0" 
     catenateAll="0" 
     preserveOriginal="1" 
    /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ASCIIFoldingFilterFactory"/> 
    </analyzer> 
</fieldType> 

運行分析它給了我這樣的: enter image description here

這裏查詢UI:enter image description here

+0

你能否澄清,是失敗的查詢:'計算器 - version1.0'或'「計算器 - 1.0版」' – femtoRgon

+0

它是不帶引號 – steph

回答

1

你可以試試WordDelimiterFilterFactory,它有很多選項可以嘗試...

您可以嘗試以下字段類型爲您的字段。

<fieldtype name="subword" class="solr.TextField"> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" 
       generateWordParts="1" 
       generateNumberParts="1" 
       catenateWords="0" 
       catenateNumbers="0" 
       catenateAll="0" 
       preserveOriginal="1" 
       /> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.StopFilterFactory"/> 
     </analyzer> 
     <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" 
       generateWordParts="1" 
       generateNumberParts="1" 
       catenateWords="1" 
       catenateNumbers="1" 
       catenateAll="0" 
       preserveOriginal="1" 
       /> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.StopFilterFactory"/> 
     </analyzer> 
    </fieldtype> 

在這裏,您可以一旦的FieldType添加並應用到外地玩的WordDelimiterFilterFactory

重新啓動服務器,您可以分析solr分析頁面中的輸入和輸出。在solr分析頁面上,它將向您展示如何爲在索引和查詢時給出的輸入生成標記。

這將幫助您根據您的要求構建自己的自定義字段類型。

這裏是鏈接列出了所有的分詞器和過濾器的例子。 analyzers

+0

第一個我更新了我的代碼之上,但仍顯示,當我輸入「stackoverflow-version1.0」時,我找不到「stackoverflow」 – steph

+0

您是否檢查在solr管理頁面中創建的令牌......在索引中創建了所有令牌以及爲查詢創建了所有令牌... ?你可以在這裏張貼...?這將有助於指導你... –

+0

我添加了一個截圖。這部分是否足夠說明?因爲輸出實際上要大得多 – steph