2012-05-27 84 views
1

當我使用以下Solr查詢執行搜索時,我得到了我想要的內容:已使用術語「PHP」或「編程」標記的「課程」。如何在Solr方面搜索中正確編碼術語

q=[* TO *]&facet=on&facet.field=facet_contenttype&fq=facet_contenttype:mediaitems_course&facet.field=facet_wmterm&fq=(facet_wmterm:PHP OR Programming) 

現在,我想還包括已被標記爲'C#.NET'的課程。整個字符串'C#.NET'是我正在使用的CMS中的一個標記。我已經嘗試了facet_wmterm過濾器查詢的以下可能性。

&fq=(facet_wmterm:PHP OR Programming OR C# .NET) // no quotes 
&fq=(facet_wmterm:PHP OR Programming OR 'C# .NET') // quotes 
&fq=(facet_wmterm:PHP OR Programming OR 'C#+.NET') // quotes and replaced space for + sign 
&fq=(facet_wmterm:PHP OR Programming OR C#%2b.NET) // no quotes, encoded + sign 
&fq=(facet_wmterm:PHP OR Programming OR 'C#%2b.NET') // quotes, encoded + sign 
&fq=(facet_wmterm:PHP OR Programming OR 'C%23+.NET') // quotes, encoded # sign 
&fq=(facet_wmterm:PHP OR Programming OR C%23+.NET) // no quotes, encoded # sign 
&fq=(facet_wmterm:PHP OR Programming OR 'C%23%2B.NET') // quotes, encoded # and + signs 
&fq=(facet_wmterm:PHP OR Programming OR C%23%2B.NET) // no quotes, encoded # and + signs 
and a lot more options.... 

奇怪的是,上述所有選項返回所有課程,不管他們被標記了,我敢肯定我不是在尋找在高速緩存,因爲刪除了「C#.NET」位給我的最初,正確的「PHP或編程」結果。

我很想知道如何在我的方面查詢中包含'C#.NET',因爲我正要稍微發瘋:)謝謝!

+0

什麼是數據類型看起來像schema.xml中。答案會根據您是否使用StandardTokenizerFactory,LowerCaseFilterFactory等而有所不同。 – Evan

回答

0

重複字段名稱會產生影響。

&fq=facet_wmterm:Test1 OR PHP 

..是給我的所有結果(=錯誤),並重復字段名這樣

&fq=facet_wmterm:Test1 OR facet_wmterm:PHP 

..是給我用的Test1或PHP只能課程(=正確的!)。感謝那個Ansari。

雖然這仍然不能幫助我正確查詢.NET C#課程,因爲我也錯誤地轉義了特殊字符。在Solr中,您可以使用引號來逐字搜索引號之間的內容,但是您必須使用雙引號而不是我正在使用的單引號。 http://wiki.apache.org/solr/SolrQuerySyntax

這爲我工作:

&fq=(facet_wmterm:Test1 OR "C# .NET") 
+0

是的,我只是指出了一個問題 - 我留下了逃避的問題供您弄清楚。這只是一個示例規則。一般來說,雙引號需要逐字搜索,並使用URL編碼特殊字符。您可以使用管理部分準確找出需要編碼的內容。 – Ansari

1

要確定哪一個轉義方案效果最好,請嘗試在每個術語前加上字段名稱。因此,例如,把你的第三行,試試這個:

&fq=(facet_wmterm:PHP OR facet_wmterm:Programming OR facet_wmterm:'C#+.NET') // quotes and replaced space for + sign 

的原因是,每學期必須與它需要在字段中指定,否則它的搜索在默認域(text)。對於轉義問題,文字必須用雙引號編碼,其他需要逐字顯示的特殊符號必須進行URL編碼。