2012-02-14 11 views
7

In un'installazione SOLR, quando eseguo una ricerca su un campo con un termine di ricerca di più parole, voglio che SOLR restituisca i documenti che hanno tutti i termini nella ricerca, ma non è necessario essere nell'ordine esatto.Solr - Risultati che contengono tutti i termini, in qualsiasi ordine

Ad esempio, se cerco il titolo di Brown Chicken Brown Cow, voglio trovare tutti i documenti che contengono tutti i termini Brown, Chicken e Cow, indipendentemente dall'ordine nel campo del titolo. Quindi, ad esempio, il titolo "La gallina e la mucca hanno la cacca marrone" dovrebbe corrispondere alla domanda. AFAIK, questo è il modo in cui Google esegue anche le ricerche.

Ho sperimentato con i seguenti formati di query:

1. Title:Brown AND Title:Chicken 
2. Title:Brown AND Chicken 
3. Title:Brown+Chicken 

Sono molto confuso dai risultati. In alcuni casi, le prime due query restituiscono lo stesso insieme esatto di risultati. In altri casi, la prima versione restituirà molti risultati e la seconda versione non restituirà alcun risultato. La terza versione sembra soddisfare i miei bisogni, ma sono confuso dal diverso significato delle query.

Tutti i miei test sono stati eseguiti su un campo di tipo text_it.

<field name="Title" multiValued="false" type="text_en" indexed="true" stored="true"/> 

Quindi, qual è la migliore query SOLR/configurazione per questo tipo di ricerca? Inoltre, c'è un modo semplice per fare in modo che Solr.NET utilizzi un termine di ricerca immesso dall'utente e lo converta in questo tipo di formato?

Inoltre, SOLR di default darà ai documenti che corrispondono all'ordine della frase di ricerca un punteggio di pertinenza più elevato? In caso contrario, quali sono le leve giuste per attuare ciò?

Modifica: Parte della mia confusione è stata causata dalla ricerca di campi non predefiniti vs campi predefiniti. Sapendo questo, l'unico formato che funziona in modo coerente è il primo formato.

+0

Per favore [non aggiungere firme o tagline ai tuoi messaggi] (http://stackoverflow.com/faq#signatures). – meagar

risposta

6

Se fossi in te cercherei di usare:

Title:(Brown Chicken) 

staffe renderà equivalente a la tua domanda n. 1. La quotazione costringerà Solr a cercare la corrispondenza esatta, compreso lo spazio e l'ordine

+0

Perfetto. Grazie! – jmacinnes

+0

Sei sicuro che restituisce solo risultati che contengono tutti i termini? – vefthym

+0

Sono sicuro (caso generale), a meno che il tuo operatore bool predefinito sia "OR" o usi 'edimax' con' mm' – Fuxi

2

Si prega di provare Title:"Brown Chicken" o utilizzare il parser di query Dismax per gestire le vostre domande.


Il wiki for lucene query parser parla (sottolineatura mia):

.... Dal testo è il campo predefinito, l'indicatore di campo non è obbligatorio.

Nota: Il campo è valido solo per il termine che precede direttamente, quindi la query

titolo: Fare bene

trovare solo "Do" nel campo del titolo . Troverà "it" e "right" nel campo predefinito (in questo caso il campo di testo).

Hai solo il campo titolo nel modello dati?

Eseguire debugQuery=on per spiegare la query per vedere come vengono lanciati: vederlo in azione https://stackoverflow.com/a/9262300/604511

+0

No, ci sono più campi nei miei documenti. Il titolo è il campo predefinito, quindi questo spiega alcune delle stranezze che stavo vedendo. Usare le virgolette non funziona; applica l'ordine dei termini. Con queste informazioni, sembra che l'unico modo per ottenere ciò che voglio sia questo formato: Titolo: Brown AND Titolo: Chicken. Sfortunatamente, è meno complicato analizzare una parola chiave in quella forma. Guarderò Dismax. – jmacinnes

+0

"impone l'ordine dei termini" avrebbe dovuto sapere: -/ – aitchnyu

Problemi correlati