2015-04-23 72 views
1

我需要微調我的搜索相關性和權重爲返回的結果是:Solr的搜索相關性增強和BF加權不與內容合作^ 1

  • 不搜索

  • 標題搜索相關不返回匹配列表,以請求處理程序的頂部

Solr的配置片斷:

<requestHandler name="/select" class="solr.SearchHandler"> 
<lst name="defaults"> 
    <str name="defType">edismax</str> 
    <str name="echoParams">explicit</str> 
    <int name="rows">10</int> 
    <str name="df">text</str> 
    <str name="q.alt">*:*</str> 
    <str name="q.op">AND</str> 
    <str name="qf">title^15.0 description^9.0 categoryNames^3.0 authorName^1.0 content^1.0</str> 
    <str name="boost">scoreA</str> 
</lst> 
<lst name="appends"> 
    <str name="fq">private:false</str> 
    <str name="fq">deleted:false</str> 
    <str name="fq">draft:false</str> 
</lst> 

Solr的模式片段:

<field name="content" type="text_en_splitting" indexed="true" stored="true" multiValued="true"/> 

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/> 
<field name="type" type="string" indexed="true" stored="true"/> 
<field name="title" type="text_en_splitting" indexed="true" stored="true"/> 
<field name="description" type="text_en_splitting" indexed="true" stored="true"/> 
<field name="url" type="string" indexed="false" stored="true"/> 
<field name="authorId" type="long" indexed="true" stored="true"/> 
<field name="authorName" type="text_en" indexed="true" stored="true"/> 

    <copyField source="title" dest="text"/> 
    <copyField source="description" dest="text"/> 
    <copyField source="content" dest="text"/> 

<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.PorterStemFilterFactory"/> 
    </analyzer> 
</fieldType> 

twigkit搜索查詢:

<search:query var="query" type="all" parameters="*" resultsPerPage="18" sorts="-scoreA" fields="id,url,price,title,description,recommended,modifiedDate,downloadCount:field(downloadCount),ratingAverage:field(ratingAverage),ratingCount:field(ratingCount),scoreA:field(scoreA),scoreB:field(scoreB),viewCount:field(viewCount),authorName,authorId,content,categoryNames"> 
</search:query> 

<search:response var="response" platform="${platform}" query="${query}"></search:response> 

我發現至今: 如果我刪除從Solr的 QF PARAMS內容^ 1點的權重,然後按相關搜索和標題搜索完美的作品。獲得預期的結果。

但是,如果我保留內容^ 1加權在Solr qf然後它都出錯了。

問題可能與此有關,但不能確定:

在Solr模式,我有內容類型:

type="text_en_splitting" 

此字段類型有此過濾器適用於:

<filter class="solr.PorterStemFilterFactory"/> 

在帶有索引和查詢值的solr控制檯中運行分析儀時: 第一次世界大戰完成單元

我可以看到當它到達上述過濾器時,該值爲:

first world war complet unit 

在「E」被從「完整的」字刪去。

下面是Solr的響應的片段時, '內容^ 1' 是QF:

"responseHeader": { 
"status": 0, 
"QTime": 187, 
"params": { 
    "lowercaseOperators": "true", 
    "spellcheck": "true", 
    "facet": "true", 
    "sort": "scoreA desc", 
    "indent": "true", 
    "qf": "title^15.0 description^9.0 categoryNames^3.0 authorName^1.0 content^1", 
    "spellcheck.collate": "true", 
    "wt": [ 
    "json", 
    "javabin" 
    ], 
    "hl": "true", 
    "version": "2", 
    "defType": "edismax", 
    "rows": "18", 
    "fl": "id,url,price,title,description,recommended,modifiedDate,downloadCount:field(downloadCount),ratingAverage:field(ratingAverage),ratingCount:field(ratingCount),scoreA:field(scoreA),scoreB:field(scoreB),viewCount:field(viewCount),authorName,authorId,content,categoryNames,score", 
    "start": "0", 
    "q": "world wars", 
    "q.op": "AND", 
    "_": "1429801074587", 
    "facet.field": [ 
    "categories", 
    "categoryRoot", 
    "resourceTypes", 
    "fileTypes", 
    "recommended", 
    "licence" 
    ], 
    "stopwords": "true" 
} 

進一步的調查結果:

當查詢 '世界大戰' 搜索, 「戰爭」這個詞的重量正在加重,因爲它在前幾個列表附件中發現了很多次。如果單詞「戰爭」單獨發現或作爲另一個詞的一部分發現,似乎分數會得到提升。例如,'戰爭'和'小心'。

我只是需要內容分數來提高當'戰爭'被發現作爲一個整體單詞,並沒有做任何事情,如果發現換句話說。希望這是有道理的。

+0

你爲什麼需要這個權重? – Mysterion

+0

如果沒有其他匹配(標題,說明等),但從我的搜索查詢中查找附件「內容」中的某些內容,則應在搜索中返回高位。 – user3554072

+0

當你談論刪除'content^1'加權時,你的意思是你完全從'qf'中取出'content'字段,還是隻是取下'^ 1'?你可能還想添加更多的細節,當你說它的時候你的意思是**「完美地工作」**而沒有加權,但是**「它全部出錯」**。出了什麼問題?您是否收到錯誤消息,或者您的相關訂單無法正常工作? – frances

回答

1

這個問題的最終解決方案原來是使用sort=score desc&boost=scoreA而不是sort=scoreA desc。這將使用scoreA的增強值作爲Solr score的乘數,然後使用score進行排序,該算法考慮了Solr自己的相關性數學和提升值。導致這一結論的原始答案和對話如下。

聽起來你好像很高興與其他領域的相對權重,但即使在較低的重量,含量爲相比於其他領域也相關。

最可能的解決方案是調整權重,或者降低內容的權重,或者提高其他字段的權重。也許content^0.1會給你你想要的結果。如果您在搜索內容字段時唯一的目的是在比較重要的地方找不到匹配項時找到匹配項,那麼設置極低的相對權重將確保「內容」匹配永遠不會超過其他字段中的匹配項。

一般來說,我發現solr.explain.pl是調試Solr相關性的有用工具。它將從測試Solr查詢中獲取查詢結果,您可以在其中激活可選的相關性解釋輸出,併爲您提供圖形化表示,說明如何爲每個結果文檔確定相關性。它不能很好地處理具有自己邏輯運算符的複雜查詢,但通過一個簡單的測試查詢,它可以幫助您理解相關性順序的確定方式,因此您可以對其進行適當調整。


編輯:現在你已經添加的響應片段,我注意到你正在使用q.op=AND,但是這是Standard Query Parser的一個特徵。由於您使用的是Extended Dismax Query Parser,因此應該使用mmMinimum Match)參數。 mm=100%相當於Dismax和Extended Dismax Query Parsers的q.op=AND。我不知道這是否與你遇到的問題有關,但可能是。

+0

我嘗試過不同的權重,但仍然不能解決問題。我嘗試使用標題^ 150.0描述^ 90.0 categoryNames^30.0 authorName^1.0 content^0.1但仍得到相同的結果。只有當內容從qf中刪除時,結果纔會發生變化。 – user3554072

+0

您是否嘗試查看「解釋」數據?它確實有助於查看哪些字段對每個結果的分數以及多少有貢獻。 – frances

+0

我剛剛根據您添加到問題的回覆片段添加了一些內容。 – frances