SOLR完全匹配结果不匹配

时间:2020-01-27 13:15:50

标签: parsing solr match solr-query-syntax

嗨,我有一个text_exact的fieldType(字段为text_ex),其中有KeywordTokenizerFactory可以用于精确查询的匹配。例如,搜索sale会得到包含术语sale的结果。当我像这样text_ex:sale运行查询时,发现结果数为28,就像我使用switch-query解析器(在请求处理程序中定义)运行同一查询时,得到的结果数一样。即使已解析的查询与切换查询text_ex:sale中的fq相同,也为18。谁能帮我调试这个问题?我想查询的解析方式在确定是假还是假的情况下存在一些不一致之处。我不确定。

这是我的架构定义:

<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详细信息:

<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 }

0 个答案:

没有答案