2013-04-03 2 views
9

Comment effectuer une recherche dans un champ de matrice? J'utilise solr 4.2 avec les paramètres par défaut. J'ai indexé quelques documents html et pdf en utilisant SolrNet. Voici un exemple de résultat pour un tel document lorsque je recherche en utilisant la recherche admin *:*Syntaxe de requête Solr pour le champ de matrice

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 recherche à l'aide content:* renvoie 0 résultats.

Répondre

9

Au lieu de content:* essayez avec content:[* TO *]. Cela va chercher tous les documents qui ont le champ content non vide.

Pour interroger des tableaux/champs à valeurs multiples, cela dépend de ce que vous voulez faire. Si vous avez un champ à plusieurs valeurs comme:

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

et que vous voulez trouver des documents ayant à la fois death et history que tag_names émet alors une requête comme

q=tag_names:(death AND history) 

Pour faire une OU, utilisez

q=tag_names:(death OR history) 
+0

'contenu: [* TO * ] 'ne fonctionne pas non plus – chadisbad

+0

Pouvez-vous poster le fieldType et sa définition pour le champ' content'? Si ce n'est pas un champ indexé, vous ne pouvez pas le rechercher. – arun

+0

Je l'ai posté dans ma réponse. Vous avez raison, c'était le problème. Merci. – chadisbad

-1

text:* fonctionne. Il retourne tous mes docs.

je suis arrivé ce à partir du schéma:

 <!-- 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 réponse à votre question est très simple.

Votre fichier Schema.xml dit que le champ name = "content" indexé = "false" dire votre champ de contenu ne soit pas consultable. Donc, si vous recherchez quelque chose pour "contenu", il retournera 0 résultats.

Veuillez modifier votre fichier schema.xml et faire en sorte que le champ de contenu soit indexé = "true", ce qui rendra le champ mertifiable. Enregistrer le fichier
Redémarrer Solr.
Effacer l'index.
Réindexer les documents

Maintenant, vous serez en mesure de faire des recherches sur le contenu : *

S'il vous plaît accepter la réponse si elle résout votre problème ...