Używamy ElasticSearch i mamy problemy podczas wyszukiwania terminów zawierających spację. Konkretny przykład: jest osoba o imieniu JM Bruno, ale podczas jej wyszukiwania nie są zwracane żadne wyniki. Niejasno pamiętam, że szukanie tego dokładnego terminu zwróciło wynik, ale nie mogę tego teraz odtworzyć.ElasticSearch dla warunków ze spacjami
Próbowałem dodać spację i "\" do mojego wzorca tokenizera, bez powodzenia. Ustawienia ES są następujące (przy użyciu gem opon w Ruby on Rails aplikacji)
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
Używamy tych tokenizers szukać nazw domen i adresów e-mail, jak również.
zwraca kod 400 z błędem „nie udało się znaleźć analizatora”. Czy ES nie jest świadomy tego, czego używam w ustawieniach w klejnocie opon, jeśli chodzi o analizatory? – HannesFostie
Wypróbuj MyModel.index.analyze "Mój tekst", analizator: "name_analyzer" – karmi
zorientowałem się, że muszę dodać indeks, ale odpowiedź nie znaczy dla mnie wiele. Z pewnością znajdzie garść tokenów, ponieważ spodziewałbym się, że zostaną zenkcjonowani przez ngram, ale to nie wyjaśnia, dlaczego nie jest uwzględnione w wyszukiwaniu (przynajmniej, to nie jest dla mnie jasne). – HannesFostie