2014-07-24 4 views
0

내 solr 3.6.2 데비안 서버에서 동일한 쿼리를 두 번 dismax 및 edismax로 수행하면 나는 예상대로 dismax 4 개의 결과를 얻었지만 edismax에 대한 결과는 0 개입니다. .Solr 나는 dismax로 결과를 얻었지만 edismax로는 얻지 못했습니다

다음과 같은 색인에서 실행 된 3 가지 예제가 있습니다.

  1. Edismax과 : 어떤 결과를 가졌으나 없습니다 Q = M025 : 이 지수는 기록 "M025 일부-예 레코드 레이블을"이 포함되어 있습니다.
  2. Dismax와 함께 : q = M025이 (가) 찾았습니다.
  3. Edismax with : q = 1 개 항목을 찾은 사례.

왜 EDISMAX는 "M025"가 아니라 "예제"를 찾지 못합니까?

SOLR 스키마

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="txt/mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="txt/stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="German2" protected="txt/protwords.txt" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="Italian" protected="txt/protwords.txt" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="French" protected="txt/protwords.txt" /> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
     <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="25" /> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="txt/mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="txt/synonyms.txt" ignoreCase="true" expand="true" /> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="txt/stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="German2" protected="txt/protwords.txt" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="Italian" protected="txt/protwords.txt" /> 
     <filter class="solr.SnowballPorterFilterFactory" language="French" protected="txt/protwords.txt" /> 
    </analyzer> 
</fieldType> 

<field name="label" type="text" indexed="true" stored="true" termVectors="true" omitNorms="true" required="true" /> 

예 EDISMAX

http://127.0.0.1:8080/solr/select?defType=edismax&qf=label&fl=label&q=M025&fq=model:Model_DbTable_Site&debugQuery=true 
<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">3</int> 
     <lst name="params"> 
     <str name="fl">label</str> 
     <str name="echoParams">all</str> 
     <str name="qf">label</str> 
     <str name="hl.fl">teaser</str> 
     <str name="wt">xml</str> 
     <str name="rows">25</str> 
     <str name="defType">edismax</str> 
     <str name="fl">label</str> 
     <str name="debugQuery">true</str> 
     <str name="q">M025</str> 
     <str name="qf">label</str> 
     <str name="fq">model:Model_DbTable_Site</str> 
     <str name="defType">edismax</str> 
     </lst> 
    </lst> 
    <result name="response" numFound="0" start="0" /> 
    <lst name="debug"> 
     <str name="rawquerystring">M025</str> 
     <str name="querystring">M025</str> 
     <str name="parsedquery">+DisjunctionMaxQuery((((label:m025 label:m label:025)~3)))</str> 
     <str name="parsedquery_toString">+(((label:m025 label:m label:025)~3))</str> 
     <lst name="explain" /> 
     <str name="QParser">ExtendedDismaxQParser</str> 
     <null name="altquerystring" /> 
     <null name="boostfuncs" /> 
     <arr name="filter_queries"> 
     <str>model:Model_DbTable_Site</str> 
     </arr> 
     <arr name="parsed_filter_queries"> 
     <str>model:Model_DbTable_Site</str> 
     </arr> 
     <lst name="timing"> 
     <double name="time">2.0</double> 
     <lst name="prepare"> 
      <double name="time">1.0</double> 
      <lst name="org.apache.solr.handler.component.QueryComponent"> 
       <double name="time">1.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.FacetComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.HighlightComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.StatsComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.DebugComponent"> 
       <double name="time">0.0</double> 
      </lst> 
     </lst> 
     <lst name="process"> 
      <double name="time">1.0</double> 
      <lst name="org.apache.solr.handler.component.QueryComponent"> 
       <double name="time">1.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.FacetComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.HighlightComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.StatsComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.DebugComponent"> 
       <double name="time">0.0</double> 
      </lst> 
     </lst> 
     </lst> 
    </lst> 
</response> 

예 DISMAX

http://127.0.0.1:8080/solr/select?defType=dismax&qf=label&fl=label&q=M025&fq=model:Model_DbTable_Site&debugQuery=true 
<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">21</int> 
     <lst name="params"> 
     <str name="fl">label</str> 
     <str name="echoParams">all</str> 
     <str name="qf">label</str> 
     <str name="hl.fl">teaser</str> 
     <str name="wt">xml</str> 
     <str name="rows">25</str> 
     <str name="defType">dismax</str> 
     <str name="fl">label</str> 
     <str name="debugQuery">true</str> 
     <str name="q">M025</str> 
     <str name="qf">label</str> 
     <str name="fq">model:Model_DbTable_Site</str> 
     <str name="defType">dismax</str> 
     </lst> 
    </lst> 
    <result name="response" numFound="4" start="0"> 
     <doc> 
     <str name="label">M025 Some-Example Record</str> 
     </doc> 
     <doc> 
     <str name="label">S025 ******************</</str> 
     </doc> 
     <doc> 
     <str name="label">ES025 ******************</str> 
     </doc> 
     <doc> 
     <str name="label">WK025 ******************</</str> 
     </doc> 
    </result> 
    <lst name="debug"> 
     <str name="rawquerystring">M025</str> 
     <str name="querystring">M025</str> 
     <str name="parsedquery">+DisjunctionMaxQuery(((label:m025 label:m label:025)))()</str> 
     <str name="parsedquery_toString">+((label:m025 label:m label:025))()</str> 
     <lst name="explain"> 
     <str name="Model_DbTable_Site_1">4.7416363 = (MATCH) sum of: 
    4.7416363 = (MATCH) product of: 
    7.112454 = (MATCH) sum of: 
     3.277886 = (MATCH) weight(label:m025 in 7440), product of: 
     0.4947139 = queryWeight(label:m025), product of: 
      6.625821 = idf(docFreq=27, maxDocs=7770) 
      0.07466454 = queryNorm 
     6.625821 = (MATCH) fieldWeight(label:m025 in 7440), product of: 
      1.0 = tf(termFreq(label:m025)=1) 
      6.625821 = idf(docFreq=27, maxDocs=7770) 
      1.0 = fieldNorm(field=label, doc=7440) 
     3.834568 = (MATCH) weight(label:025 in 7440), product of: 
     0.44994345 = queryWeight(label:025), product of: 
      6.0262 = idf(docFreq=50, maxDocs=7770) 
      0.07466454 = queryNorm 
     8.522333 = (MATCH) fieldWeight(label:025 in 7440), product of: 
      1.4142135 = tf(termFreq(label:025)=2) 
      6.0262 = idf(docFreq=50, maxDocs=7770) 
      1.0 = fieldNorm(field=label, doc=7440) 
    0.6666667 = coord(2/3)</str> 
     <str name="Model_DbTable_Site_239">1.2781894 = (MATCH) sum of: 
    1.2781894 = (MATCH) product of: 
    3.834568 = (MATCH) sum of: 
     3.834568 = (MATCH) weight(label:025 in 428), product of: 
     0.44994345 = queryWeight(label:025), product of: 
      6.0262 = idf(docFreq=50, maxDocs=7770) 
      0.07466454 = queryNorm 
     8.522333 = (MATCH) fieldWeight(label:025 in 428), product of: 
      1.4142135 = tf(termFreq(label:025)=2) 
      6.0262 = idf(docFreq=50, maxDocs=7770) 
      1.0 = fieldNorm(field=label, doc=428) 
    0.33333334 = coord(1/3)</str> 
     <str name="Model_DbTable_Site_61">1.2781894 = (MATCH) sum of: 
    1.2781894 = (MATCH) product of: 
    3.834568 = (MATCH) sum of: 
     3.834568 = (MATCH) weight(label:025 in 83), product of: 
     0.44994345 = queryWeight(label:025), product of: 
      6.0262 = idf(docFreq=50, maxDocs=7770) 
      0.07466454 = queryNorm 
     8.522333 = (MATCH) fieldWeight(label:025 in 83), product of: 
      1.4142135 = tf(termFreq(label:025)=2) 
      6.0262 = idf(docFreq=50, maxDocs=7770) 
      1.0 = fieldNorm(field=label, doc=83) 
    0.33333334 = coord(1/3)</str> 
     <str name="Model_DbTable_Site_51">1.2781894 = (MATCH) sum of: 
    1.2781894 = (MATCH) product of: 
    3.834568 = (MATCH) sum of: 
     3.834568 = (MATCH) weight(label:025 in 43), product of: 
     0.44994345 = queryWeight(label:025), product of: 
      6.0262 = idf(docFreq=50, maxDocs=7770) 
      0.07466454 = queryNorm 
     8.522333 = (MATCH) fieldWeight(label:025 in 43), product of: 
      1.4142135 = tf(termFreq(label:025)=2) 
      6.0262 = idf(docFreq=50, maxDocs=7770) 
      1.0 = fieldNorm(field=label, doc=43) 
    0.33333334 = coord(1/3)</str> 
     </lst> 
     <str name="QParser">DisMaxQParser</str> 
     <null name="altquerystring" /> 
     <null name="boostfuncs" /> 
     <arr name="filter_queries"> 
     <str>model:Model_DbTable_Site</str> 
     </arr> 
     <arr name="parsed_filter_queries"> 
     <str>model:Model_DbTable_Site</str> 
     </arr> 
     <lst name="timing"> 
     <double name="time">21.0</double> 
     <lst name="prepare"> 
      <double name="time">1.0</double> 
      <lst name="org.apache.solr.handler.component.QueryComponent"> 
       <double name="time">1.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.FacetComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.HighlightComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.StatsComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.DebugComponent"> 
       <double name="time">0.0</double> 
      </lst> 
     </lst> 
     <lst name="process"> 
      <double name="time">20.0</double> 
      <lst name="org.apache.solr.handler.component.QueryComponent"> 
       <double name="time">18.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.FacetComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.HighlightComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.StatsComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.DebugComponent"> 
       <double name="time">2.0</double> 
      </lst> 
     </lst> 
     </lst> 
    </lst> 
</response> 

전 이름 충분한 EDISMAX

http://127.0.0.1:8080/solr/select?defType=edismax&qf=label&fl=label&q=Example&fq=model:Model_DbTable_Site&debugQuery=true 
<?xml version="1.0" encoding="UTF-8"?> 
<response> 
    <lst name="responseHeader"> 
     <int name="status">0</int> 
     <int name="QTime">1</int> 
     <lst name="params"> 
     <str name="fl">label</str> 
     <str name="echoParams">all</str> 
     <str name="qf">label</str> 
     <str name="hl.fl">teaser</str> 
     <str name="wt">xml</str> 
     <str name="rows">25</str> 
     <str name="defType">edismax</str> 
     <str name="fl">label</str> 
     <str name="debugQuery">true</str> 
     <str name="q">Example</str> 
     <str name="qf">label</str> 
     <str name="fq">model:Model_DbTable_Site</str> 
     <str name="defType">edismax</str> 
     </lst> 
    </lst> 
    <result name="response" numFound="1" start="0"> 
     <doc> 
     <str name="label">M025 Some-Example Record</str> 
     </doc> 
    </result> 
    <lst name="debug"> 
     <str name="rawquerystring">Example</str> 
     <str name="querystring">Example</str> 
     <str name="parsedquery">+DisjunctionMaxQuery((label:example))</str> 
     <str name="parsedquery_toString">+(label:example)</str> 
     <lst name="explain"> 
     <str name="Model_DbTable_Site_1">9.264878 = (MATCH) fieldWeight(label:example in 7440), product of: 
    1.0 = tf(termFreq(label:example)=1) 
    9.264878 = idf(docFreq=1, maxDocs=7770) 
    1.0 = fieldNorm(field=label, doc=7440)</str> 
     </lst> 
     <str name="QParser">ExtendedDismaxQParser</str> 
     <null name="altquerystring" /> 
     <null name="boostfuncs" /> 
     <arr name="filter_queries"> 
     <str>model:Model_DbTable_Site</str> 
     </arr> 
     <arr name="parsed_filter_queries"> 
     <str>model:Model_DbTable_Site</str> 
     </arr> 
     <lst name="timing"> 
     <double name="time">1.0</double> 
     <lst name="prepare"> 
      <double name="time">0.0</double> 
      <lst name="org.apache.solr.handler.component.QueryComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.FacetComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.HighlightComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.StatsComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.DebugComponent"> 
       <double name="time">0.0</double> 
      </lst> 
     </lst> 
     <lst name="process"> 
      <double name="time">1.0</double> 
      <lst name="org.apache.solr.handler.component.QueryComponent"> 
       <double name="time">1.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.FacetComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.HighlightComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.StatsComponent"> 
       <double name="time">0.0</double> 
      </lst> 
      <lst name="org.apache.solr.handler.component.DebugComponent"> 
       <double name="time">0.0</double> 
      </lst> 
     </lst> 
     </lst> 
    </lst> 
</response> 

답변

0

오른쪽이 글을 쓰는 후에 나는 해결책을 찾아 냈다.

DISMAX가 발견 한 이유는 무엇일까?하지만 문제는 이름입니다. 내 스키마의 원래이었다 :

<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="25" /> 

구문 분석 쿼리

그래서 문자와 숫자 하나 개 N- 그램이었다 "m"두 번째는 "025" 때문에 그래서 갈라됩니다

+DisjunctionMaxQuery((((label:m025 label:m label:025)~3))) 

입니다 "m"길이는 무시되었습니다. < 2입니다. 변경 후

<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="25" /> 

에 난 내가 기대했던 결과를 얻었다.