2013-04-03 9 views
9

Come si cerca in un campo array?Sintassi della query Solr per campo array

Sto usando solr 4.2 con le impostazioni predefinite. Ho indicizzato alcuni documenti html e pdf usando SolrNet. Ecco il risultato di esempio per un tale documento quando faccio una ricerca utilizzando la ricerca di amministrazione *:*

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> 

la ricerca utilizzando content:* restituisce 0 risultati.

risposta

9

Invece di content:* provare con content:[* TO *]. Questo preleverà tutti i documenti che hanno il campo content non vuoto.

Per interrogare matrici/campi multivalore, dipende da cosa si desidera eseguire. Se si dispone di un campo multivalore come:

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

e si desidera trovare i documenti avendo sia death e history come tag_names quindi emettere una query come

q=tag_names:(death AND history) 

Per fare un OR, utilizzare

q=tag_names:(death OR history) 
+0

'contenuto: [* TO * ] 'non funziona neanche – chadisbad

+0

Puoi pubblicare fieldType e la sua definizione per il campo' content'? Se non è un campo indicizzato, non puoi cercarlo. – arun

+0

L'ho pubblicato nella mia risposta. Hai ragione, questo era il problema. Grazie. – chadisbad

-1

text:* opere. Restituisce tutti i miei documenti.

ho ottenuto questo dallo 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

La risposta alla tua domanda è molto semplice.

tuo Schema.xml di file dice che il campo name = "content" indicizzato = "false" vale a dire il vostro campo contenuto non è ricercabile. Quindi se cerchi qualcosa per "contenuto" restituirà 0 risultati.

Cambiare il file schema.xml e rendere il campo contenuto come indicizzato = "true", in modo da rendere il campo accettabile.

Salvare il file
Riavviare Sol.
Cancella l'indice.
Reindicizza documenti

Ora sarete in grado di fare ricerca su contenuti: *

Si prega di accettare la risposta, se si risolve il problema ...