2012-04-27 69 views
1

我是Solr的新手,我正在嘗試使用Solr(3.6)包示例文件夾(apache-solr-3.6.0.tgz)中的示例。我啓動了服務器,併發布xml文件example/exampledocs,然後我可以搜索的東西和Solr將返回匹配,這一切都很好。但後來我試圖發佈超過10,000個文件的另一個XML文件。我修改了example/solr/conf/schema.xml文件以添加我的xml文件的字段,然後重新啓動服務器併發布我的xml文件。我查看了Solr管理面板中的統計信息(http://localhost:8983/solr/admin/stats.jsp),它顯示了numDocs : 10020。現在這意味着文檔已經成功發佈。但是,當我搜索我的發佈文檔中存在的任何內容(來自10,000文檔xml文件)時,它將返回0個結果。但Solr仍然能夠返回匹配example/exampledocs文件夾中默認出現的文檔中的內容的搜索結果。我對這裏發生的事情一無所知。 numDoc的值清楚地表明,我在xml文件中發佈的文檔被編入索引。 還有什麼我可以檢查看看這有什麼問題?solr索引文件,但不在其中搜索

,它與Solr的包的例子的模式是這樣的

<field name="id" type="string" indexed="true" stored="true" required="true"/> 
<field name="sku" type="text_en_splitting_tight" indexed="true" stored="true" omitNorms="true"/> 
<field name="name" type="text_general" indexed="true" stored="true"/><field name="alphaNameSort" type="alphaOnlySort" indexed="true" stored="false"/> 
<field name="manu" type="text_general" indexed="true" stored="true" omitNorms="true"/> 
<field name="cat" type="string" indexed="true" stored="true" multiValued="true"/> 
<field name="features" type="text_en_splitting" indexed="true" stored="true" multiValued="true"/> 
<field name="includes" type="text_general" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/> 
<field name="weight" type="float" indexed="true" stored="true"/> 
<field name="price" type="float" indexed="true" stored="true"/> 
<field name="popularity" type="int" indexed="true" stored="true"/> 
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/> 
<field name="subject" type="text_general" indexed="true" stored="true"/> 
<field name="description" type="text_general" indexed="true" stored="true"/> 
<field name="inStock" type="boolean" indexed="true" stored="true"/> 

多....

,我貼了一些領域中常見的XML文件的架構如標題,描述,價格等上面的架構,所以我輸入的字段的其餘schema.xml中這樣

<field name="cid" type="int" indexed="false" stored="false"/> 
<field name="discount" type="float" indexed="true" stored="true"/> 
<field name="link" type="string" indexed="true" stored="true"/> 
<field name="status" type="string" indexed="true" stored="true"/> 
<field name="pubDate" type="string" indexed="true" stored="true"/> 
<field name="image" type="string" indexed="false" stored="false"/> 
+0

你的查詢和模式是什麼樣的?你有沒有試過尋找'*:*'? – 2012-04-27 18:33:45

+0

@MauricioScheffer我試着搜索'*:*',結果標籤的屬性'numfound'是'10020'。但它只顯示10個結果''。我在標題或描述中查詢單詞,不適合編輯我的問題以向您展示模式 – lovesh 2012-04-27 19:34:54

+0

@MauricioScheffer我查詢了*:*'並傳遞了參數'start = 50',它顯示了我發佈的數據XML文件,但爲什麼它無法搜索他們? – lovesh 2012-04-27 19:50:09

回答

6

如果您正在使用從Solr的示例站點的默認設置,TH由於/select請求處理程序的solrconfig.xml文件中的df設置,因此它將默認搜索字段設置爲text字段。

<requestHandler name="/select" class="solr.SearchHandler"> 
    <!-- default values for query parameters can be specified, these 
     will be overridden by parameters in the request 
    --> 
    <lst name="defaults"> 
    <str name="echoParams">explicit</str> 
    <int name="rows">10</int> 
    <str name="df">text</str> 
    </lst> 
    .... 
</requestHandler> 

如果您在Schema.xml文件略低於字段定義看你會看到多個copyField設置,通過默認字段設置移動某些字段中的值到text領域,因此讓其他人搜尋。在標題字段中搜索Sony的示例中,如果查看copyField語句,您將看到title字段未被複制到默認搜索字段text。因此,具有Sony標題值的文檔不會在您的查詢中返回。

我建議如下:title:Sony應該返回你期待什麼:

  1. 通過指定以下嘗試查詢。
  2. 如果您希望將title字段包含在默認查詢字段中,請將以下copyField語句添加到schema.xml文件並重新加載您的10000文檔文件。 <copyField source="title" dest="text">

我希望這會有所幫助。

+0

非常感謝。使用'title:sony'作品。但是,如果我將'title'的類型從'text_general'改爲'text_en_splitting',那麼查詢'title:sony'會再次返回0結果。另外,如果我將'name'的類型從'text_general'設置爲'text_en_splitting',我不會得到所需的行爲。我的意思是如果'name'字段包含'A-DATA',並且我搜索'adata'沒有匹配。任何想法爲什麼發生這些事情? – lovesh 2012-04-30 04:10:20

+0

你救了我的一天。謝謝庫克先生。 – 2012-12-17 16:10:07