2014-10-01 75 views
1

我有基於他們已撰寫的文本文檔的人員索引。這是字段類型:計算Solr中多值文本字段的完整匹配

<fieldtype name="TField" class="solr.TextField" positionIncrementGap="100" omitNorms="true"> 
     <analyzer> 
      <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory" /> 
      <filter class="solr.StopFilterFactory" /> 
      <filter class="solr.PorterStemFilterFactory" /> 
      <filter class="solr.PositionFilterFactory" /> 
     </analyzer> 
    </fieldtype> 

而且字段聲明本身:

<field name="Publication"    type="TField"   indexed="true"   stored="true" multiValued="true" /> 

和請求處理程序配置:

<requestHandler name="/select/" class="solr.StandardRequestHandler" default="true" > 
     <lst name="defaults" > 
      <str name="defType">edismax</str> 
      <str name="qf">Publication</str> 
      <str name="fl">ID,score</str> 
      <str name="q.alt">*:*</str> 
      <str name="rows">10</str> 
     </lst> 
    </requestHandler> 

理想的情況是處理文本查詢和返回人們對文本查詢匹配的出版物數量進行評分。例如:

某甲與內容「貓狗鼠」,「貓狗之家」,「香蕉」

某乙有內容「貓狗鼠」,「貓」三個文件三個文件, 「狗」

人C有內容「貓」,「狗」,「香蕉」

如果文本查詢是「貓狗」兩個文件,我想人一個是頂部比分2 (匹配「貓狗老鼠」,「貓狗屋」),與得分1(匹配「貓狗老鼠」)和Person C完全不歸還的人B。

我目前的實現無法在兩個方面做到這一點。首先,它返回Person C,因爲Solr似乎將multiValued字段的內容合併爲一個,所以貓和狗出現在單獨的A出版物條目中似乎並不重要。

其次,與第一個強烈相關的是,基於發佈字段中所有值串聯的內容,TF-IDF的評分是TF-IDF。因此,人A和B最終得分相同,因爲貓和狗在其整個文檔語料庫中出現相同次數。

有什麼方法可以實現我在找的東西嗎?更一般地說,有沒有辦法根據匹配multiValued字段的單個條目對文檔進行評分,而不是將所有條目作爲一個整體進行評分?

回答

1

經過大量的使用Google搜索之後,似乎出於評分和檢索的目的,在多值字段中有多個條目並且這些值串聯起來的單個條目是等效的。我們通過創建自己創作的文檔索引,然後搜索該索引併爲作者創作版面,部分解決了我們特定情況下的問題。這產生一個作者列表,按照他們撰寫的相關文檔的數量排序。這個解決方案並不完美,並且存在許多問題,例如不知道可用結果總數(因爲您無法計算方面的條目數量),或者無法對作者執行更復雜的過濾。

想到我會分享我的死衚衕。