Понимание 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 - правильный обработчик запросов и т. Д.

Другие вопросы по тегам