2013-08-22 8 views
1

Я пытаюсь понять запросы solr вложенных запросов, но у меня проблема с выбором синтаксиса.Подставленные запросы 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.

Что я здесь делаю неправильно?

+0

добавить debugQuery = true в параметры запроса и просмотреть расширенную информацию. BTW, space before & defType выглядит подозрительно. –

+0

Что такое тип города? Это solr.StrField или solr.TextField? – rchukh

+1

Вы когда-нибудь это выясняли? –

ответ

1

нужно удалить "=" и заменить его ":" использовать вложенный синтаксис запроса:

д = "Fulano Silva" ~ 2 И _query_: «{! Edismax QF = город} Тири»& defType = edismax & QF = имя & эт = оценка

* Используйте _query_: вместо _query_ =

Надеется, что это работает ...

+1

hummm ... нет. Не повезло. Пробовал '__query __: xxx',' _query_: xxx', '__query __ = xxx' и' _query_ = xxx'. –

0

EDIT: Когда вы говоритеq=, вы указав запрос в URL или текст послеq=должен быть помещен в приложении или на приборной панели Solr? Если мы говорим о URL-адресе, вам может потребоваться использовать percent-encoding, чтобы заставить его работать. Я упомянул об этом ниже, но, поскольку я не слышал от вас, я думал, что повторю.

Почему бы вам не сделать 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. Кроме того, если эти запросы находятся в вашей строке запроса, убедитесь, что вы правильно указали encoding.

Для того, чтобы помочь вам больше, мне нужно знать, что вы пытаетесь выполнить с помощью вашего запроса. Тогда, возможно, мы можем быть уверены, что у вас есть право индексации установить, что edismax правильного обработчика запросов и т.д.

0

Поверх предыдущих комментариев, спрашивающий имеет mispelled _query_ в __query__ (обратите внимание на двойное подчеркивание во втором , ошибочно, версия); Solr ожидает, что _query_ будет пишется только с одним подчеркиванием (_) до и после слова запроса, а не с двумя.

 Смежные вопросы

  • Нет связанных вопросов^_^