Синтаксис запроса Solr для поля массива

Как выполнить поиск в поле массива?

Я использую Solr 4.2 с настройками по умолчанию. Я проиндексировал несколько html и pdf документов с помощью SolrNet. Вот пример результата для такого документа, когда я ищу с помощью поиска администратора *:*

enter code here
<doc>
<str name="id">2</str>
<date name="last_modified">2011-12-19T17:33:25Z</date>
<str name="author">name</str>
<str name="author_s">name</str>
<arr name="title">
  <str>CALIFORNIA CODES</str>
</arr>
<arr name="content_type">
  <str>application/pdf</str>
</arr>
<str name="resourcename">T01041.pdf</str>
<arr name="content">
  <str> PDF text here </str>
</arr>
<long name="_version_">1431314431195742208</long>
</doc>

Поиск с использованием content:* возвращает 0 результатов.


person chadisbad    schedule 03.04.2013    source источник


Ответы (3)


Вместо content:* попробуйте content:[* TO *]. Это позволит получить все документы, у которых поле content не пусто.

Для запроса массивов/многозначных полей это зависит от того, что вы хотите сделать. Если у вас есть многозначное поле, например:

<arr name="tag_names">
    <str>death</str>
    <str>history</str>
    <str>people</str>
    <str>historical figures</str>
    <str>assassinations</str>
</arr>

и вы хотите найти документы, имеющие как death, так и history как tag_names, а затем выполните запрос, например

q=tag_names:(death AND history)

Чтобы сделать ИЛИ, используйте

q=tag_names:(death OR history)
person arun    schedule 04.04.2013
comment
Можете ли вы опубликовать fieldType и его определение для поля content? Если это не проиндексированное поле, вы не можете выполнять поиск по нему. - person arun; 04.04.2013
comment
Я разместил это в своем ответе. Вы правы, это была проблема. благодаря. - person chadisbad; 04.04.2013
comment
спас мой день! грази! - person Himel Nag Rana; 22.07.2014

Ответ на ваш вопрос очень прост.

В вашем файле Schema.xml указано, что поле name="content" indexed="false"т.е. ваше поле контента недоступно для поиска. Поэтому, если вы ищете что-либо по запросу «контент», он вернет 0 результатов.

Пожалуйста, измените файл schema.xml и сделайте поле содержимого как indexed="true", чтобы это поле можно было просматривать.

Сохраните файл
Перезапустите Solr.
Очистите индекс.
Переиндексируйте документы

Теперь вы сможете выполнять поиск по content:*

Пожалуйста, примите ответ, если он решит вашу проблему...

person Jayesh Bhoyar    schedule 04.04.2013

text:* работает. Он возвращает все мои документы.

Я понял из схемы:

     <!-- Main body of document extracted by SolrCell.
        NOTE: This field is not indexed by default, since it is also copied to "text"
        using copyField below. This is to save space. Use this field for returning and
        highlighting document content. Use the "text" field to search the content. -->
   <field name="content" type="text_general" indexed="false" stored="true" multiValued="true"/>


   <!-- catchall field, containing all other searchable text fields (implemented
        via copyField further on in this schema  -->
   <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
person chadisbad    schedule 04.04.2013