2013-05-06 52 views
0

我正嘗試在solr中搜索,但我想優先搜索字段(即標題)而不是其他字段(如「董事」)中的字段(即標題)。 這是我的schema.xml中的一部分Solr:字段中的高優先級

<fields> 
    <field name="Id" type="string" indexed="true" stored="true" required="true"/> 
    <field name="Title" type="text_general" indexed="true" stored="true"/> 
    <field name="OriginalTitle" type="text_general" indexed="true" stored="true"/> 
    <field name="Directors" type="text_general" indexed="true" stored="true" multiValued="true" required="false"/> 
    <field name="Language" type="text_general" indexed="false" stored="true" required="false"/> 
    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> 
</fields> 

<uniqueKey>Id</uniqueKey> 

<defaultSearchField>text</defaultSearchField> 

<solrQueryParser defaultOperator="OR"/> 

<copyField source="Title" dest="text"/> 
<copyField source="OriginalTitle" dest="text"/> 
<copyField source="Directors" dest="text"/> 
<copyField source="Keywords" dest="text"/> 

這是我的請求處理:

<lst name="responseHeader"> 
    <int name="status">0</int> 
    <int name="QTime">2</int> 
    <lst name="params"> 
    <str name="lowercaseOperators">true</str> 
    <str name="pf">Title^100 Directors^10</str> 
    <str name="indent">true</str> 
    <str name="q">fo*</str> 
    <str name="qf">Title Directors</str> 
    <str name="stopwords">true</str> 
    <str name="wt">xml</str> 
    <str name="defType">edismax</str> 
    </lst> 
</lst> 

我的結果是:

<result name="response" numFound="4" start="0"> 
    <doc> 
    <str name="Language">Ingles subtítulos español</str> 
    <str name="Title">Footloose</str> 
    <arr name="Directors"> 
     <str>Herbert Ross</str> 
    </arr> 
    <str name="OriginalTitle">Footloose (1984)</str> 
</doc> 
    <doc> 
    <str name="Language">Ingles subtítulos español</str> 
    <str name="Title">Amadeus</str> 
    <arr name="Directors"> 
     <str>Milos Forman</str> 
    </arr> 
    <str name="OriginalTitle">Amadeus</str> 
</doc> 
    <doc> 
    <str name="Language">Ingles subtítulos español</str> 
    <str name="Title">Forrest Gump</str> 
    <arr name="Directors"> 
     <str>Robert Zemeckis</str> 
    </arr> 
    <str name="OriginalTitle">Forrest Gump</str> 
</doc> 
    <doc> 
    <str name="Language">Doblado al español</str> 
    <str name="Title">Chimpancés</str> 
    <arr name="Directors"> 
     <str>Alastair Fothergill</str> 
     <str> Mark Linfield</str> 
    </arr> 
    <str name="OriginalTitle">Chimpanzee Esp</str> 
</doc> 
</result> 

,但我想這樣的結果:

<result name="response" numFound="4" start="0"> 
    <doc> 
    <str name="Language">Ingles subtítulos español</str> 
    <str name="Title">Footloose</str> 
    <arr name="Directors"> 
     <str>Herbert Ross</str> 
    </arr> 
    <str name="OriginalTitle">Footloose (1984)</str> 
</doc> 
    <doc> 
    <str name="Language">Ingles subtítulos español</str> 
    <str name="Title">Forrest Gump</str> 
    <arr name="Directors"> 
     <str>Robert Zemeckis</str> 
    </arr> 
    <str name="OriginalTitle">Forrest Gump</str> 
</doc> 
<doc> 
    <str name="Language">Ingles subtítulos español</str> 
    <str name="Title">Amadeus</str> 
    <arr name="Directors"> 
     <str>Milos Forman</str> 
    </arr> 
    <str name="OriginalTitle">Amadeus</str> 
</doc> 
    <doc> 
    <str name="Language">Doblado al español</str> 
    <str name="Title">Chimpancés</str> 
    <arr name="Directors"> 
     <str>Alastair Fothergill</str> 
     <str> Mark Linfield</str> 
    </arr> 
    <str name="OriginalTitle">Chimpanzee Esp</str> 
</doc> 
</result> 

我該怎麼辦我的問題Ÿ得到我想要的迴應?

UPDATE: 關於調試=真,我得到了這樣的結果:

<lst name="debug"> 
<str name="rawquerystring">fo*</str> 
<str name="querystring">fo*</str> 
<str name="parsedquery"> 
(+DisjunctionMaxQuery((Directors:fo* | Title:fo*))()())/no_coord 
</str> 
<str name="parsedquery_toString">+(Directors:fo* | Title:fo*)()()</str> 
<lst name="explain"> 
<str name="10"> 
1.0 = (MATCH) sum of: 1.0 = (MATCH) max of: 1.0 = (MATCH) ConstantScore(Title:fo*), product of: 1.0 = boost 1.0 = queryNorm 
</str> 
<str name="2"> 
1.0 = (MATCH) sum of: 1.0 = (MATCH) max of: 1.0 = (MATCH) ConstantScore(Directors:fo*), product of: 1.0 = boost 1.0 = queryNorm 
</str> 
<str name="12"> 
1.0 = (MATCH) sum of: 1.0 = (MATCH) max of: 1.0 = (MATCH) ConstantScore(Title:fo*), product of: 1.0 = boost 1.0 = queryNorm 
</str> 
<str name="711"> 
1.0 = (MATCH) sum of: 1.0 = (MATCH) max of: 1.0 = (MATCH) ConstantScore(Directors:fo*), product of: 1.0 = boost 1.0 = queryNorm 
</str> 
</lst> 
<str name="QParser">ExtendedDismaxQParser</str> 
<null name="altquerystring"/> 
<null name="boost_queries"/> 
<arr name="parsed_boost_queries"/> 
<null name="boostfuncs"/> 
<lst name="timing"> 
<double name="time">4.0</double> 
<lst name="prepare"> 
<double name="time">1.0</double> 
<lst name="query"> 
<double name="time">1.0</double> 
</lst> 
<lst name="facet"> 
<double name="time">0.0</double> 
</lst> 
<lst name="mlt"> 
<double name="time">0.0</double> 
</lst> 
<lst name="highlight"> 
<double name="time">0.0</double> 
</lst> 
<lst name="stats"> 
<double name="time">0.0</double> 
</lst> 
<lst name="debug"> 
<double name="time">0.0</double> 
</lst> 
</lst> 
<lst name="process"> 
<double name="time">3.0</double> 
<lst name="query"> 
<double name="time">0.0</double> 
</lst> 
<lst name="facet"> 
<double name="time">0.0</double> 
</lst> 
<lst name="mlt"> 
<double name="time">0.0</double> 
</lst> 
<lst name="highlight"> 
<double name="time">0.0</double> 
</lst> 
<lst name="stats"> 
<double name="time">0.0</double> 
</lst> 
<lst name="debug"> 
<double name="time">3.0</double> 
</lst> 
</lst> 
</lst> 
</lst> 

回答

3

您正在提高您的樂句字段匹配,但不會增加您的查詢字段匹配。你可能想提高所有人,尤其是因爲你的搜索實際上並不是一個短語:

<str name="pf">Title^100 Directors^10</str> 
<str name="qf">Title Directors</str> 

嘗試把相同的權重上QF場。

+0

的回覆謝謝,這對我很有用。現在我需要研究如何降低「to」,「a」等字詞的優先級。 – shinjidev 2013-05-07 13:22:54

+0

這就是StopFilterFactory的功能。我認爲你的默認配置已經使用它,你可能只需要添加更多你想忽略的單詞。但是,是的,這將是一個單獨的問題。 – 2013-05-07 14:01:37

0

你應該嘗試做一個解釋(但調試= true或debugQuery = trueto查詢字符串),看看有什麼元素的查詢分數。 看起來它可能是術語頻率或這種差異。由於您沒有太多內容,所以它可能還會在文檔之間產生聯繫

+0

我已經更新了我的問題,其中debug = true – shinjidev 2013-05-06 19:13:38