2014-07-09 18 views
5

È possibile combinare le corrispondenze di caratteri jolly e ngram in ElasticSearch? Sto già usando ngrams di lunghezza 3-11.Come utilizzare i caratteri jolly con ngram in ElasticSearch

Come esempio molto piccolo, ho record C1239123 e C1230123. L'utente vuole restituire entrambi. Questa è l'unica informazione che conoscono: C123? 12

Il caso sopra non funzionerà sul mio analizzatore a partita intera perché alla fine manca il 3 alla fine. Avevo l'impressione che le corrispondenze con i caratteri jolly funzionassero fuori dagli schemi, ma se eseguo una ricerca simile a quella sopra non prendo spunto.

Query:

.Search<ElasticSearchProject>(a => a 
    .Size(100) 
    .Query(q => q 
     .SimpleQueryString(query => query 
      .OnFieldsWithBoost(b => b 
       .Add(f => f.Summary, 2.1) 
       .Add(f => f.Summary.Suffix("ngram"), 2.0) 
      .Query(searchQuery)))); 

Analyzer:

var projectPartialMatch = new CustomAnalyzer 
{ 
    Filter = new List<string> { "lowercase", "asciifolding" }, 
    Tokenizer = "ngramtokenizer" 
}; 

Tokenizer:

.Tokenizers(t=>t 
    .Add("ngramtokenizer", new NGramTokenizer 
    { 
     TokenChars = new[] {"letter","digit","punctuation"}, 
     MaxGram = 11, 
     MinGram = 3 
    })) 

EDIT: Lo scopo principale è quello di permettere all'utente di indicare al motore di ricerca esattamente dove il i personaggi sconosciuti sono Questo conserva l'ordine di partita. Io non ngram la query, solo i campi indicizzati.

EDIT 2 con più risultati del test: Ho semplificato un po 'troppo il mio esempio precedente. Il linguaggio senza senso era causato da filtri di punteggiatura. Con un esempio corretto non ci sono termini senza senso, ma i risultati non vengono restituiti in un ordine pertinente. Vedendo di seguito, non sono sicuro del motivo per cui i primi 2 risultati corrispondono a tutti. Ngram non viene applicato alla query. ??

Ricerca di c.a123 0,7 0 dà risultati in questo ordine:

  • C.A1234.560
  • C.A1234.800
  • C.A1234.700 < - Non dovrebbe essere questo il primo?
  • C.A1234.950
+0

Hai provato 'c123? 12 *'? Va bene combinare le corrispondenze con caratteri jolly e gli ngram in ElasticSearch, ma devi capire come funziona. Altrimenti restituisce risultati imprevisti –

+0

@ Duc.Duong ho provato quello. Restituisce risultati, ma sembra che non abbiano rilevanza per la query. – Brandon

+0

Puoi pubblicare i risultati corrispondenti? Possiamo investigare di più su di esso –

risposta

1

Per tutti coloro che cercano una soluzione a questo, i caratteri jolly vengono utilizzati su token ngrammed per impostazione predefinita. Il mio problema era dovuto alla presenza di segni di punteggiatura e all'utilizzo di un analizzatore standard sulla mia query (che si interrompe con la punteggiatura).

Il suggerimento di Duc.Duong di utilizzare il plug-in Inquisitor ha aiutato a mostrare esattamente come i dati sarebbero stati analizzati.

Problemi correlati