Domanda

sto usando SolrNet per accedere a un indice di Solr dove ho un campo multivalore denominato "tag". Voglio eseguire la seguente query pseudo-codice:

(tags: stack) ^ 10 OR (tags: oltre) ^ 5 OR (tags: flusso) ^ 2

dove il termine "stack" è stato potenziato del 10, "over" viene potenziato da 5 e "Flow" viene potenziato da 2. Il risultato che sto cercando è che i risultati con "stack" appariranno più alto quelli con "flusso", ecc.

Il problema che sto avendo è che diciamo "flusso" appare solo in un paio di documenti, ma appare "impilare" in carichi, poi a causa di un valore elevato IDF, i documenti con "flusso" appaiono sopra quelli con "pila ".

Quando questo è stato progetto è stato realizzato direttamente in Lucene, ho usato ConstantScoreQuery e questi ha eliminato l'IDF basato il punteggio esclusivamente sul valore di boost.

Come può essere realizzato con Solr e SolrNet, dove sto effectivly solo di passaggio Solr una stringa di query? Se non è possibile, c'è un modo alternativo posso affrontare questo problema?

Grazie in anticipo!

È stato utile?

Soluzione

Non credo che c'è un modo per esprimere direttamente un ConstantScoreQuery in Solr, ma sembra che query range e prefisso utilizzano ConstantScoreQuery sotto il cofano , così si potrebbe provare a fingere una query gamma, ad esempio, tags:[flow TO flow]

In alternativa, è possibile implementare il proprio Solr QueryParser.

Altri suggerimenti

Solr 5.1 e successivamente ha questo costruito nella sintassi di query parser tramite ^ = operatore.

Quindi, solo prendere la vostra query originale: (Tags: stack) ^ 10 OR (tags: oltre) ^ 5 OR (tags: flusso) ^ 2

E sostituire il ^ con ^ = Per passare dalla potenziato a costante: (Tags: stack) ^ = 10 OR (tags: sopra) ^ = 5 OR (tags: flow) ^ = 2

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