Привет У меня есть 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
}