SOLR точные результаты не совпадают - PullRequest
1 голос
/ 27 января 2020

Привет У меня есть text_exact fieldType (поле text_ex), которое имеет KeywordTokenizerFactory для сопоставления с точными запросами. Например, поиск sale дает результаты, которые содержат термин sale, в частности. Когда я запускаю запрос, подобный этому text_ex:sale, число результатов оказалось равным 28, тогда как, когда я выполняю тот же запрос, используя анализатор запросов на переключатели (определенный в обработчике запросов), я получаю число результатов как 18 даже если проанализированный запрос совпадает с text_ex:sale в запросе на переключение fq. Может кто-нибудь помочь мне отладить эту проблему? Я предполагаю, что существует некоторая несогласованность в способе анализа запроса для точного случая, который является истинным или ложным. Я не уверена.

Вот мое определение схемы:

<fieldType name="text_exact" class="solr.TextField" omitNorms="false">
    <analyzer type="index" omitTermFreqAndPositions="false">  
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />    
        <filter class="solr.WordDelimiterGraphFilterFactory"
            generateWordParts="1"
            generateNumberParts="0"
            catenateWords="0"
            catenateNumbers="0"
            catenateAll="1"
            splitOnCaseChange="0"
            splitOnNumerics="0"/>
    </analyzer> 
    <analyzer type="query"> 
        <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" /> 
        <filter class="solr.WordDelimiterGraphFilterFactory"
            generateWordParts="0"
            generateNumberParts="0"
            catenateWords="0"
            catenateNumbers="0"
            catenateAll="1"
            splitOnCaseChange="0"
            splitOnNumerics="0"/>
    </analyzer> 
</fieldType>

А вот мое solrconfig. xml details:

<requestHandler name="/select" class="solr.SearchHandler">
    <!-- default values for query parameters can be specified, these
         will be overridden by parameters in the request
      -->
    <lst name="defaults">
      <str name="exact">false</str>
      <str name="echoParams">explicit</str>
      <int name="rows">10</int>
      <str name="defType">edismax</str>
      <str name="qf">
        displayValue^20 description^5 connectorName_txt zenDescription_txt^5 zenBusinessOwner_txt^2 
        categoryName^8 reportOwner^2 reportDetailsNameColumn^5 
      </str>
      <str name="pf2">
        displayValue^20 description^5 connectorName_txt zenDescription_txt^5 zenBusinessOwner_txt^2 
        categoryName^8 reportOwner^2 reportDetailsNameColumn^5 
      </str>
      <str name="pf3">
        displayValue^20 description^5 connectorName_txt zenDescription_txt^5 zenBusinessOwner_txt^2 
        categoryName^8 reportOwner^2 reportDetailsNameColumn^5 
      </str>
      <str name="tie">1</str>
      <str name="mm">100%</str>
      <int name="ps2">3</int>
      <int name="ps3">9</int>
      <int name="qs">0</int>
      <str name="df">text</str>
      <str name="q.alt">*:*</str>
      <str name="sort">score desc, averageRating desc, lastOneWeekCount desc</str>
      <str name="bq">
        query({!boost b=20}approved:"yes")
      </str>
    </lst>
    <lst name="appends">
      <str name="fq">{!switch case.false=*:* case.true=text_ex:$${q} v=$exact}</str>
    </lst>
</requestHandler>

А вот проанализированный запрос, когда я сделал точный поиск с использованием обработчика запроса:

"filter_queries":["{!switch case.false=\"*:*\" case.true=\"text_ex:sale\" v=$exact}"],
 "parsed_filter_queries":["text_ex:sale"]

А вот проанализированный запрос при выполнении запроса text_ex:sale:

"filter_queries": [
      "{!switch case.false=\"*:*\" case.true=\"text_ex:text_ex:sale\" v=$exact}"
    ],
    "parsed_filter_queries": [
      "MatchAllDocsQuery(*:*)"
    ]

Также я заметил, что заключение запроса в двойную кавычки бросает синтаксическую ошибку. Любые предложения о том, как решить эту проблему? Заранее спасибо.

Вот сообщение об ошибке:

"error": { "msg": "org.apache.solr.search.SyntaxError: Expected identifier at pos 53 str='{!switch case.false=\"*:*\" case.true=\"text_ex:text_ex\":sale\"\" v=$exact}'", "code": 400 }

...