2013-04-03 4 views
9

Как искать в поле массива?Синтаксис запроса 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 результатов.

ответ

9

Вместо 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) 

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

q=tag_names:(death OR history) 
+0

'содержание: [* TO * ] 'не работает либо – chadisbad

+0

Можете ли вы разместить fieldType и его определение для поля' content'? Если это не индексированное поле, вы не можете его искать. – arun

+0

Я отправил его в свой ответ. Вы правы, это была проблема. Благодарю. – chadisbad

-1

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"/> 
1

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

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

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

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

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

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

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

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