나는 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>
고마워, 그게 나를 위해 작동합니다. 이제 "to", "a"및 기타와 같은 단어의 우선 순위를 줄이는 방법에 대해 조사해야합니다. – shinjidev
StopFilterFactory가 그 것입니다. 기본 구성에서 이미 사용하고 있다고 생각합니다. 무시할 단어를 더 추가해야 할 수도 있습니다. 그러나 그렇습니다. 그것은 별개의 질문이 될 것입니다. –