Stiamo eseguendo ElasticSearch e stiamo riscontrando alcuni problemi durante la ricerca di termini che contengono uno spazio. Un esempio concreto: c'è una persona di nome JM Bruno, ma durante la ricerca di questo non vengono restituiti risultati. Ricordo vagamente che la ricerca di questo esatto termine ha restituito il risultato, ma non posso riprodurlo proprio ora.ElasticSearch per termini con spazi
Ho provato ad aggiungere uno spazio e "\" al mio pattern di tokenizer, senza molta fortuna. Le impostazioni ES sono le seguenti (utilizzando la gemma Tyre in un'applicazione Ruby on Rails)
module Search
def self.included base
base.send :include, Tire::Model::Search
base.send :include, Tire::Model::Callbacks
base.class_eval do
settings analysis: {
filter: {
ngram: {
type: 'nGram',
max_gram: 12,
min_gram: 3
},
url_stop: {
type: "stop",
stopwords: %w[http https]
}
},
tokenizer: {
url_email_tokenizer: {
pattern: '[^\w\-\[email protected]]+',
type: 'pattern'
}
},
analyzer: {
url_analyzer: {
tokenizer: "url_email_tokenizer",
filter: %w[url_stop ngram],
type: "custom"
},
name_analyzer: {
tokenizer: 'url_email_tokenizer',
filter: 'ngram',
type: 'custom'
}
}
}
end
end
end
Usiamo questi tokenizers per la ricerca di nomi di dominio e indirizzi e-mail pure.
restituisce un codice 400 con l'errore 'riuscito a trovare analizzatore'. L'ES non è a conoscenza di ciò che utilizzo per le impostazioni nella gemma di Tyre quando si tratta di analizzatori? – HannesFostie
Prova MyModel.index.analyze "Il mio testo", analizzatore: "name_analyzer" – karmi
capito che avevo bisogno di aggiungere l'indice, ma la risposta non significa molto per me. Certo, trova un mucchio di token come mi aspetterei che venissero tokenizzati dal ngram, ma questo non spiega il motivo per cui non è incluso nella ricerca (almeno, non è chiaro per me) – HannesFostie