2013-05-06 4 views
0

나는 solr을 검색하려고하지만 "Directors"와 같은 다른 필드의 필드 (즉, 제목) 검색에 우선 순위를두고 싶습니다. 이이 내 요청 처리기입니다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"/> 

제의 schema.xml의 일부입니다

<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

+0

StopFilterFactory가 그 것입니다. 기본 구성에서 이미 사용하고 있다고 생각합니다. 무시할 단어를 더 추가해야 할 수도 있습니다. 그러나 그렇습니다. 그것은 별개의 질문이 될 것입니다. –

0

는 당신이 설명을하려고한다 (그러나 디버그 = true 또는 debugQuery =를 true 쿼리 문자열)가 볼을 어떤 요소 검색어 점수 중 주파수가 다를 수도있는 것처럼 보입니다. 또한 많은 콘텐츠가 없기 때문에 문서간에 연결될 수도 있습니다.

+0

debug = true 응답으로 내 질문을 업데이트했습니다. – shinjidev

관련 문제