Chúng tôi đang chạy ElasticSearch và đang gặp một số sự cố khi tìm kiếm cụm từ chứa khoảng trắng. Một ví dụ cụ thể: có một người tên là JM Bruno, nhưng khi tìm kiếm kết quả này thì không có kết quả nào được trả về. Tôi mơ hồ nhớ rằng tìm kiếm cụm từ chính xác này đã trả về kết quả, nhưng tôi không thể tái sản xuất ngay bây giờ.Tìm kiếm theo cụm từ có khoảng trắng
Tôi đã thử thêm khoảng trắng cũng như "\" vào mẫu mã thông báo của tôi, không có nhiều may mắn. Các cài đặt ES là như sau (sử dụng đá quý Lốp trong ứng dụng 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
Chúng tôi sử dụng các mã thông báo này để tìm kiếm tên miền và địa chỉ email.
nó sẽ trả về một mã số 400 với lỗi 'không tìm thấy phân tích'. Không phải là ES nhận thức được những gì tôi sử dụng cho các thiết lập trong đá quý lốp khi nói đến phân tích? – HannesFostie
Hãy thử MyModel.index.analyze "Văn bản của tôi", máy phân tích: "name_analyzer" – karmi
đã tìm ra tôi cần thêm chỉ mục, nhưng phản hồi không có ý nghĩa nhiều với tôi. Chắc chắn, nó tìm thấy một loạt các thẻ như tôi mong đợi họ được tokenized bởi ngram, nhưng điều đó không giải thích tại sao nó không được bao gồm trong tìm kiếm (ít nhất, nó không rõ ràng với tôi) – HannesFostie