Я использую Solr 5.5, и у меня есть проблема, что я надеюсь найти решение здесь.solr shingle query matching keyword tokenized field
У меня есть поле, которое я создал, используя следующую настройку:
<field name="exactName_noAlias_en_US" type="text_exact_query_tokenized" indexed="true" stored="false"/>
<fieldtype name="text_exact_query_tokenized" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
<filter class="solr.ShingleFilterFactory" maxShingleSize="10"/>
</analyzer>
</fieldtype>
Это поле может иметь значение, как: «Джастин Бибер»
И мое ожидание следующим образом:
Для запроса: «Художник Джастин Бибер - сердце подростка», я хотел бы, чтобы он соответствовал этому документу. И такие запросы, как «Художник по имени Бибер Джастин - канадский» или «Имя Джастин настолько распространено», не должны совпадать.
Я вижу, что использование обработчика запроса по умолчанию '/ select' не находит совпадения, когда я выдаю запрос «Justin Bieber», хотя это точное совпадение. Но другое поле было установлено в поле по умолчанию для «/ выберите» RH, поэтому я попытался создать другой RH, используя приведенный ниже завиток:
curl http://localhost/solr/performer/config -H 'Content-type:application/json' -d '{"add-requesthandler" : {"name": "/exactName","class":"solr.SearchHandler","defaults":{ "echoParams":"explicit" ,"rows":10, "df":"exactName_noAlias_en_US", "q.op":"AND" },"useParams":"x"}}'
Он создал RH Я хотел, но мой запрос еще Ждет» t соответствует требуемому документу.
Просьба предложить решение этой проблемы.
Here is a screenshot from the Analysis screen.
Ниже приведен фрагмент раздела 'отладка' ответ на запрос: "/ exactName д = exactName_noAlias_en_US:? Джастин% 20Bieber & мас = JSON & отступ = истина & отладки = истинный"
"debug":{
"rawquerystring":"exactName_noAlias_en_US:Justin Bieber",
"querystring":"exactName_noAlias_en_US:Justin Bieber",
"parsedquery":"+exactName_noAlias_en_US:justin +exactName_noAlias_en_US:bieber",
"parsedquery_toString":"+exactName_noAlias_en_US:justin +exactName_noAlias_en_US:bieber",
"explain":{},
И ниже фрагмент кода из раздела «отладки» ответа на запрос: «/ выберите д = exactName_noAlias_en_US: Justin% 20Bieber & вес = & отступа JSON = верно & отлаживать = истина»
"debug":{
"rawquerystring":"exactName_noAlias_en_US:Justin Bieber",
"querystring":"exactName_noAlias_en_US:Justin Bieber",
"parsedquery":"+exactName_noAlias_en_US:justin +searchKeywords_en_US:bieber",
"parsedquery_toString":"+exactName_noAlias_en_US:justin +searchKeywords_en_US:bieber",
"explain":{},
И ниже фрагмент кода из раздела 'отладки' ответа на фразу запроса с/выберите RH: "?/Выберите д = exactName_noAlias_en_US:" Justin% 20Bieber»& вес = JSON & отступа = правда & отлаживать = истина
"debug":{
"rawquerystring":"exactName_noAlias_en_US:\"Justin Bieber\"",
"querystring":"exactName_noAlias_en_US:\"Justin Bieber\"",
"parsedquery":"MultiPhraseQuery(exactName_noAlias_en_US:\"(justin justin bieber) bieber\")",
"parsedquery_toString":"exactName_noAlias_en_US:\"(justin justin bieber) bieber\"",
"explain":{},
И ниже фрагмент кода из раздела «отладки» ответа на фразу запроса с/exactName RH: «/ exactName д = exactName_noAlias_en_US:» Джастин% 20Bieber»& вес = json & indent = true & debug = true
"debug":{
"rawquerystring":"exactName_noAlias_en_US:\"Justin Bieber\"",
"querystring":"exactName_noAlias_en_US:\"Justin Bieber\"",
"parsedquery":"MultiPhraseQuery(exactName_noAlias_en_US:\"(justin justin bieber) bieber\")",
"parsedquery_toString":"exactName_noAlias_en_US:\"(justin justin bieber) bieber\"",
"explain":{},
Ниже приведен запрос и соответствующий отлаживать раздел с пробелами в запросе спасся:
select?q=Justin\ Beiber&df=exactName_noAlias_en_US
Debug:
"rawquerystring":"Justin\\ Beiber",
"querystring":"Justin\\ Beiber",
"parsedquery":"+((exactName_noAlias_en_US:justin exactName_noAlias_en_US:justin beiber)/no_coord) +exactName_noAlias_en_US:beiber",
"parsedquery_toString":"+(exactName_noAlias_en_US:justin exactName_noAlias_en_US:justin beiber) +exactName_noAlias_en_US:beiber",
"explain":{},
Вы просмотрели вывод на странице «Анализ» под страницей администратора? Это позволит вам вводить как проиндексированный контент, так и запрос, и видеть, какие маркеры сгенерированы с обеих сторон, и получаете ли вы их с обеих сторон. Для отладки поставки поля по умолчанию или полей запроса в URL-адресах обычно проще, чем изменение или добавление обработчиков запросов. – MatsLindh
Да, я сделал. Я вижу именно то, что хотел в этом инструменте. Но я не вижу такого же поведения, когда я отправляю запрос через http с помощью/select RH или пользовательского «/ exactName», о котором я упоминал выше. – oveflown
Не могли бы вы включить вывод на этапе анализа? Также помните, что любые изменения в индексной части анализатора потребуют переиндексации этого документа. – MatsLindh