2011-04-26 21 views
7

Sto cercando un motore di ricerca di documenti (come Xapian, Whoosh, Lucene, Solr, Sfinge o altri) che sia in grado di cercare termini parziali.Ricerca documento su parole parziali

Per esempio quando si cerca il termine "brit" il motore di ricerca deve restituire i documenti contenenti sia "britney" o "Gran Bretagna" o in generale qualsiasi documento contenente una parola corrispondente r *brit*

Tangenzialmente, ho notato la maggior parte dei motori utilizzare TF-IDF (Frequenza termine-Frequenza documento inversa) o derivati ​​che si basano su termini completi e non parziali. Esistono altre tecniche che sono state implementate con successo oltre a TF-IDF per il recupero dei documenti?

+0

Si consiglia di aggiungere un tag del motore di ricerca alla domanda, lucene, Xapian o almeno il motore di ricerca. La ricerca è un tag generale, le persone che si trovano nei motori di ricerca potrebbero stancarsi di leggere ogni sorta di strane richieste per domande non relative ai motori di ricerca. In bocca al lupo! – shellter

+0

Grazie per il rifugio suggerimenti. Aggiunto più tag. – GeneralBecos

+1

Qualsiasi motivo non hai letto la documentazione dei vari motori. Lucene (e quindi Solr) supportano le ricerche con caratteri jolly: http://wiki.apache.org/lucene-java/LuceneFAQ#What_wildcard_search_support_is_available_from_Lucene – ewh

risposta

11

Con Lucene si sarebbe in grado di realizzare in diversi modi:

1.) È possibile utilizzare caratteri jolly interroga *brit* (Si dovrà impostare il parser query per consentire leader wild card)

2 .) È possibile creare un campo aggiuntivo contenente N-Grams of all the terms. Ciò comporterebbe indici più ampi, ma in molti casi sarebbe più veloce (velocità di ricerca).

3.) È possibile utilizzare la ricerca fuzzy per gestire errori di battitura nella query. per esempio. qualcuno ha digitato britnei ma voleva trovare britney.

Per le query con caratteri jolly e la ricerca fuzzy, dare un'occhiata allo query syntax docs.

+0

Come si può usare "*" all'inizio della query? – SomethingSomething

+2

Devi dire al parser della query di consentire questo tipo di query. Usa la funzione setAllowLeadingWildcard per farlo. https://lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/queryparser/classic/QueryParserBase.html#setAllowLeadingWildcard(boolean) – csupnig

Problemi correlati