2014-04-04 20 views
0

我們有數百萬條記錄。最初我們使用lucene來索引數據,但由於OutofMemeory異常,決定將數據移動到solr。以下是我們在schema.xml中聲明的用於執行索引和搜索操作的字段。lucene搜索查詢不在solr4.6中工作

<field name="product"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="source"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="target"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="pos"   type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="company"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="deprecated" type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="id"   type="string" indexed="true" stored="true" multiValued="false" required="true"/> 

我們正在使用solrj api來處理solr查詢。

Solr的查詢代碼:

SolrQuery solrQuery=new SolrQuery(); 
solrQuery.setQuery("id:*_TB"); 
solrQuery.setRows(10000); 
solrQuery.addFilterQuery(searchStr);// 
QueryResponse rsp = httpserver.query(solrQuery); 

在下面的查詢的lucene在精確搜索工作,模糊搜索等當用戶鍵入UI的短語。

EX: - 新的品牌推出

對於精確搜索在Lucene的
字符串searchstr =(來源: 「ABC」 或目標: 「ABC」 或過時的: 「ABC」)和公司的: 「TC」

模糊搜索:
字符串searchstr =(來源:新品牌推出〜0.7或目標:全新品牌推出〜0.7或過時的:新的品牌推出〜0.7)及公司 「BB」

默認搜索

字符串searchstr =(來源:新品牌推出*或目標:全新品牌推出*或棄用:新品牌推出*)和公司:在Solr的「CC」

現在,以上查詢是不加工。當用戶在UI中輸入上面的「新品牌推出」短語給它零結果。有時候我們正面臨不在lucene中區分大小寫的問題。

請建議我在哪裏做錯了。

回答

1
  1. 您已經聲明瞭字符串類型的所有字段。字符串字段類型不標記。你真的想要這樣的行爲嗎?

  2. (source:New Brand launched* OR target:New Brand launched* OR deprecated:New Brand launched*) AND company:"cc"
    如果你不使用你的周圍要進行搜索,那麼它不會在SOLR短語查詢文本雙引號。因此source:New Brand launched*實際上將被搜索爲
    source:New OR defaultField:Brand OR defaultField:launched*
    其中defaultField將是schema.xml中定義的默認字段,OR/AND將按照schema.xml中指定的默認操作符使用。而是搜索source:"New Brand launched"

查看SOLR文檔以獲取更多信息。

+0

在我的應用程序中,我想像搜索這樣的短語。例如:我想搜索「新品牌推廣*」,並且應該只以「新品牌推出」的形式獲得結果,但正如您所提到的,這是在源字段中搜索「新」,其餘字詞在默認字段中搜索。我想要得到我得到的表單SQL查詢的行爲:field1像'新品牌推廣*'或field2像''新品牌推廣*''。我如何實現這種行爲。 – Rajesh