2013-08-22 61 views
0

我是Solr的新手,我開發了一個分組搜索,它應該按object_class對搜索結果進行分組(每個數據庫表都有一個像User,Artist等對象)。SOLR查詢與字段不正確開頭

現在我試圖建立一個搜索,它應該搜索字段,如標題,副標題,內容和傳記。

對於每個對象,我都有一個不同的搜索查詢(因爲solr在分組結果時無法實現不同的排序順序)。

問題:有一個標題爲「Cuebrick」的藝術家。現在通常應該在搜索Cueb或標題時找到它:Cueb *,但這不起作用。

像截圖一樣,您可以看到我在尋找Cueb,標題:cueb *和標題:cuebrick with object_class:Artist(... AND ...)。

爲什麼我的「喜歡」查詢工作?

查詢:cueb AND object_class:Artist

query1 not working

查詢:headline:cueb* AND object_class:Artist

query2 not working

查詢:headline:cuebrick AND object_class:Artist

query3 the right result

我的架構的重要組成部分,是這樣的:

<field name="headline" type="text_de" indexed="true" stored="true" stripHTML="true" /> 
(... same for content, subtitle and biography) 


<defaultSearchField>text</defaultSearchField> 

<copyField source="headline" dest="text"/> 
<copyField source="content" dest="text"/> 
<copyField source="keywords" dest="text"/> 
<copyField source="subtitle" dest="text"/> 
<copyField source="biography" dest="text"/> 

,在這裏我text_de定義(改變了它,現在,我一定要重新索引?重啓沒有改變任何東西):

<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_de.txt" enablePositionIncrements="true" /> 
    <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="1" splitOnNumerics="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="German2" /> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_de.txt" enablePositionIncrements="true" /> 
    <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="1" splitOnNumerics="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.SnowballPorterFilterFactory" language="German2" /> 
    </analyzer> 
</fieldType> 
+0

您可以分享字段類型「text_de」的詳細信息。哪些分析儀適用於查詢和索引時間? – mgs

+0

@mgs完成:)請參閱編輯 – ahmet2106

+0

@mgs立即更新到架構(請參見上面) – ahmet2106

回答

2

令牌 「cuebrick」 將被存儲在索引爲 「cubrick」 由於過濾類= 「solr.SnowballPorterFilterFactory」 LANGUAGE = 「German2」。

您的查詢標題:cueb *是通配符查詢。 通配符查詢不會對您作爲查詢提供的文本執行任何分析。所以它會搜索前綴爲「cueb」的標記,並且無法找到任何匹配項,因爲您的索引標記爲「cubrick」。

更改您的查詢爲標題:cub *並查看結果。

+0

標題:cub *正常工作..您是對的。所以去除雪球搬運工過濾器應該解決索引問題? – ahmet2106

+0

我真的想保存每個單詞,因爲它是.. – ahmet2106

+0

是的。如果您覺得對您有幫助,請投票回答。:) – mgs