Gần đây tôi đã bắt đầu sử dụng ElasticSearch và dường như tôi không thể tìm kiếm nó cho một phần của từ.
Ví dụ: Tôi có ba tài liệu từ couchdb của tôi được lập chỉ mục trong ElasticSearch:
{
"_id" : "1",
"name" : "John Doeman",
"function" : "Janitor"
}
{
"_id" : "2",
"name" : "Jane Doewoman",
"function" : "Teacher"
}
{
"_id" : "3",
"name" : "Jimmy Jackal",
"function" : "Student"
}
Vì vậy, bây giờ, tôi muốn tìm kiếm tất cả các tài liệu có chứa "Doe"
curl http://localhost:9200/my_idx/my_type/_search?q=Doe
Điều đó không trả lại bất kỳ lượt truy cập. Nhưng nếu tôi tìm kiếm
curl http://localhost:9200/my_idx/my_type/_search?q=Doeman
Nó trả về một tài liệu (John Doeman).
Tôi đã thử đặt các máy phân tích khác nhau và các bộ lọc khác nhau làm thuộc tính cho chỉ mục của mình. Tôi cũng đã thử sử dụng một truy vấn đầy đủ (ví dụ:
{
"query": {
"term": {
"name": "Doe"
}
}
}
) Nhưng dường như không có gì để làm việc.
Làm cách nào tôi có thể làm cho Tìm kiếm đàn hồi tìm thấy cả John Doeman và Jane Doewoman khi tôi tìm kiếm "Doe"?
CẬP NHẬT
Tôi đã cố gắng sử dụng mã thông báo và bộ lọc nGram, như đề xuất của Igor, như thế này:
{
"index": {
"index": "my_idx",
"type": "my_type",
"bulk_size": "100",
"bulk_timeout": "10ms",
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "custom",
"tokenizer": "my_ngram_tokenizer",
"filter": [
"my_ngram_filter"
]
}
},
"filter": {
"my_ngram_filter": {
"type": "nGram",
"min_gram": 1,
"max_gram": 1
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": 1,
"max_gram": 1
}
}
}
}
}
Vấn đề tôi gặp phải bây giờ là mỗi truy vấn trả về TẤT CẢ các tài liệu. Bất kỳ con trỏ? Tài liệu về Tìm kiếm đàn hồi khi sử dụng nGram không tuyệt vời ...