Domanda

Ho un insieme di documenti contenenti Solr (tra gli altri campi) campi multivalore con dati percentuali o -1 se il valore è nullo, per esempio.

<doc>
    ...
    <arr name="alpha">
        <float>0.23</float>
        <float>0.23</float>
        <float>0.43</float>
    </arr>
    <arr name="beta">
        <float>0.52</float>
        <float>-1.0</float>
        <float>0.34</float>
    </arr>
    <arr name="gamma">
        <float>-1.0</float>
        <float>-1.0</float>
        <float>-1.0</float>
    </arr>
    ...
</doc>

Ho bisogno di trovare documenti in cui un campo multi-valore contiene o non contiene un determinato utente da un set completo di casi di test. Se posso ottenere una delle query di seguito per il lavoro, sarebbe un grande aiuto per individuare un particolare documento di diverse centinaia di migliaia:

1) posso trovare un documento in cui non dei membri di uno specifico campo di multi-valore si incontrano un certo criterio? (Quanto sopra doc sarebbe restituito se interrogato per "alpha non ha membri corrispondenza -1".)

2) Posso trovare un documento in cui almeno un dei membri di un campo specifico multi-valore incontra un certo criterio? (Quanto sopra doc verrebbe restituito se ho chiesto per "alpha ha almeno un membro> 0" o "beta ha almeno un membro> 0".)

sto supponendo che una query come alpha:[0 TO 1] non funziona perché il campo è un array invece di uno scalare. Una risposta definitiva di "Questo è impossibile" è altrettanto utile come una risposta di "Ecco come si fa." - grazie in anticipo

Modifica :. Come con tanti problemi, la risposta è "ricontrollare le vostre ipotesi" - in particolare, lo sviluppatore che ha generato i nostri documenti spento l'indicizzazione sui campi percentuali

È stato utile?

Soluzione

  1. Sì. -alpha:"-1.0" raggiunge questo.

  2. Il vostro esempio, alpha:[0 TO 1], è la soluzione.

Per dirla semplicemente perché questo funziona: ogni campo non è un valore o un array, ma piuttosto un vettore di termini. Interrogazione di un campo per un certo periodo è una domanda di inclusione (o esclusione), non un'operazione parità.

L'array si fa riferimento è una parte del set di risultati, che è i dati memorizzati pianura che viene restituito dalla Solr come parte dei risultati della ricerca.

Altri suggerimenti

E 'certamente possibile.

Io di solito uso il parametro di FQ (query filtro) per ottenere ciò che si vuole: http://wiki.apache.org/solr/CommonQueryParameters#fq

Ma si può semplicemente buttare sulla query pure.

Soluzione per # 1:

fq=-alpha:-1.0

Filtri fuori tutto ciò che ha alpha pari a -1.0

Non sono sicuro sulla soluzione # 2. Hai provato il codice che hai menzionato?

fq=beta:[0.0 TO 1.0]

Non ho un buon set di dati campione di prova su.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top