Понимание Solr вложенных запросов
Я пытаюсь понять вложенные запросы, но у меня возникла проблема с изменением синтаксиса.
У меня есть следующие два проиндексированных документа (среди прочих):
<doc>
<str name="city">Guarulhos</str>
<str name="name">Fulano Silva</str>
</doc>
<doc>
<str name="city">Fortaleza</str>
<str name="name">Fulano Cardoso Silva</str>
</doc>
Если я запрашиваю q="Fulano Silva"~2&defType=edismax&qf=name&fl=score
Я имею:
<doc>
<float name="score">28.038431</float>
<str name="city">Guarulhos</str>
<str name="name">Fulano Silva</str>
</doc>
<doc>
<float name="score">19.826164</float>
<str name="city">Fortaleza</str>
<str name="name">Fulano Cardoso Silva</str>
</doc>
Поэтому я подумал, что если бы я запросил:
q="Fulano Silva"~2 AND __query__="{!edismax qf=city}fortaleza" &defType=edismax&qf=name&fl=score
Я бы дал немного больше баллов за второй документ, но на самом деле я получил пустой набор результатов с numFound=0.
Что я здесь не так делаю?
3 ответа
Нужно удалить "=" и заменить его на ":", чтобы использовать синтаксис вложенного запроса:
q = "Фулано Силва"~2 И _query_:"{! edismax qf = город} Форталеза" & defType = edismax & qf = name & fl = score
* Используйте _query_: вместо _query_=
Надеюсь, это работает...
Вдобавок к предыдущим комментариям, аскер ошибся _query_
как __query__
(обратите внимание на двойное подчеркивание во второй, неправильно написанной версии); Солр ожидает _query_
пишется только с одним подчеркиванием (_
) до и один после слова запроса, а не два.
РЕДАКТИРОВАТЬ: Когда вы говорите q=
, вы указываете запрос в URL или текст после q=
быть помещенным в приложение или панель управления Solr? Если мы говорим об URL-адресе, вам может понадобиться использовать процентное кодирование, чтобы заставить его работать. Я упомянул об этом ниже, но так как я ничего не слышал от вас, я думал, что я повторю.
Почему ты не делаешь q=name:"Fulano Silva" AND city:"fortaleza"
?
Другая возможность: q=_query_:"{!edismax qf='name'}Fulano Silva" AND city:"fortaleza"
Если вы настроены на вложенный запрос, select?defType=edismax&q="Fulano Silva" AND _query_:"{!edismax qf='city' v='fortaleza'}"
должно работать, но результаты и их соответствие будут зависеть от того, какие анализаторы вы используете для запроса и индексации name
а также city
, Кроме того, если эти запросы находятся в строке запроса, убедитесь, что вы правильно их кодируете.
Чтобы помочь вам больше, мне нужно знать, что вы пытаетесь выполнить с помощью своего запроса. Тогда, возможно, мы можем быть уверены, что у вас настроена правильная индексация, что edismax - правильный обработчик запросов и т. Д.