2013-04-03 10 views
9

Wie suche ich in einem Array-Feld?Solr-Abfragesyntax für Array-Feld

Ich benutze Solr 4.2 mit Standardeinstellungen. Ich indizierte ein paar HTML- und PDF-Dokumente mit SolrNet. Hier ist ein Beispiel Ergebnis für ein solches Dokument, wenn ich die Admin-Suche Suche mit *:*

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> 

Die Suche mit content:* liefert 0 Ergebnisse.

Antwort

9

Statt content:* versuchen Sie mit content:[* TO *]. Dadurch werden alle Dokumente abgerufen, für die das Feld content nicht leer ist.

Für die Abfrage von Arrays/mehrwertigen Feldern hängt es davon ab, was Sie tun möchten. Wenn Sie ein Feld mit mehreren Werten wie:

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

und Sie möchten mit Dokumenten sowohl death zu finden und history als tag_names dann eine Abfrage wie

q=tag_names:(death AND history) 

ein ODER Verwenden Sie dazu

q=tag_names:(death OR history) 
+0

'Inhalt: [* TO * ] 'funktioniert nicht – chadisbad

+0

Können Sie den fieldType und seine Definition für' content' Feld posten? Wenn es sich nicht um ein indiziertes Feld handelt, können Sie nicht danach suchen. – arun

+0

Ich habe es in meiner Antwort gepostet. Du hast Recht, das war das Problem. Vielen Dank. – chadisbad

-1

text:* funktioniert. Es gibt alle meine Dokumente zurück.

Ich habe dies aus dem Schema:

 <!-- 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

Die Antwort auf Ihre Frage ist sehr einfach.

Ihre Schema.xml Datei sagt, dass das Feld name = "content" indiziert = "false" heißt Ihr Inhaltsfeld nicht durchsuchbar ist. Wenn Sie also nach "Inhalt" suchen, werden 0 Ergebnisse zurückgegeben.

Bitte ändern Sie Ihre Datei schema.xml und machen Sie das Inhaltsfeld als indexed = "true", so dass das Feld versiegelbar wird.

Speichern Sie die Datei
Neustart Solr.
Löschen Sie den Index.
Reindex die Dokumente

Jetzt können Sie suchen auf Inhalt tun: *

akzeptieren Bitte geben Sie die Antwort, wenn es Ihr Problem löst ...

Verwandte Themen