Kembali pada tahun 2017, muncul ide untuk mengembangkan layanan pemantauan harga pesaing. Fitur yang membedakannya dari layanan serupa lainnya adalah fungsi pencocokan otomatis barang harian. Rupanya karena kurangnya informasi tentang cara melakukan hal ini, layanan pemantauan harga hanya menawarkan kemungkinan perbandingan manual oleh pelanggan sendiri atau oleh operator layanan dengan harga 0,2 hingga 1 rubel per fakta perbandingan. Situasi nyata dengan, misalnya, 10 situs dan 20.000 produk pada masing-masing, mau tidak mau membutuhkan otomatisasi proses, karena pencocokan manual sudah terlalu lama dan mahal.
Pendekatan pencocokan otomatis akan dijelaskan di bawah ini menggunakan contoh sejumlah apotek yang bersaing menggunakan teknologi
Elaticsearch .
Deskripsi lingkungan
- OS: Windows 10
- Dasar: Penelitian Elatics 6.2
- Klien untuk permintaan: Tukang Pos 6.2
Menyiapkan Pencarian Elatics
Konfigurasi
mapper bidang dan
penganalisis produk dalam satu permintaan
PUT http://localhost:9200/app { "mappings": { "product": { "properties": { "name": { "type": "text", "analyzer": "name_analyzer" # }, "manufacturer": { "type": "text" }, "city_id": { "type": "integer" }, "company_id": { "type": "integer" }, "category_id": { "type": "integer" }, } } }, "settings": { "index": { "analysis": { "analyzer": { "name_analyzer": { "type": "custom", "tokenizer": "standard", # , "char_filter": [ "html_strip", # html "comma_to_dot_char_filter" # , ], "filter": [ "word_delimeter_filter", # "synonym_filter", # "lowercase" # ] } }, "filter": { "synonym_filter": { "type": "synonym_graph", "synonyms": [ ", ", ", ", ", ", ", , ", ", ", ", , , ", ", ", ", ", ", , ", ", , ", ", , , -, -", ", , ", ", , , ", ", ", ", ", ", , ", ", , ", ", ", ", ", ", ", ", ", ", , , ", ", ", ", g", "ml, " ] }, "word_delimeter_filter": { "type": "word_delimiter", "type_table": [ ". => DIGIT", # "- => ALPHANUM", "; => SUBWORD_DELIM", "` => SUBWORD_DELIM" ] } }, "char_filter": { "comma_to_dot_char_filter": { "type": "mapping", "mappings": [ ", => ." ] } } } } } }
Sebagai contoh, kita dapat melihat bagian mana dari alat analisa "name_analyzer" yang akan mematahkan nama obat "Hyoxysone 10mg + 30mg / g salep untuk penggunaan eksternal tabung 10g." Kami menggunakan permintaan
_ menganalisis POST http://localhost:9200/app/_analyze { "analyzer" : "name_analyzer", "text" : " 10+30/ 10" }
hasil
{ "tokens": [ { "token": "", "start_offset": 0, "end_offset": 9, "type": "<ALPHANUM>", "position": 0 }, { "token": "10", "start_offset": 10, "end_offset": 12, "type": "<ALPHANUM>", "position": 1 }, { "token": "", "start_offset": 12, "end_offset": 14, "type": "<ALPHANUM>", "position": 2 }, { "token": "30", "start_offset": 15, "end_offset": 17, "type": "<ALPHANUM>", "position": 3 }, { "token": "", "start_offset": 17, "end_offset": 19, "type": "<ALPHANUM>", "position": 4 }, { "token": "g", "start_offset": 20, "end_offset": 21, "type": "SYNONYM", #, "g" SYNONYM, , ", g" "position": 5 }, { "token": "", "start_offset": 20, "end_offset": 21, "type": "<ALPHANUM>", "position": 5 }, { "token": "", "start_offset": 22, "end_offset": 26, "type": "<ALPHANUM>", "position": 6 }, { "token": "", "start_offset": 27, "end_offset": 30, "type": "<ALPHANUM>", "position": 7 }, { "token": "", "start_offset": 31, "end_offset": 40, "type": "<ALPHANUM>", "position": 8 }, { "token": "", "start_offset": 41, "end_offset": 51, "type": "<ALPHANUM>", "position": 9 }, { "token": "", "start_offset": 52, "end_offset": 56, "type": "<ALPHANUM>", "position": 10 }, { "token": "10", "start_offset": 57, "end_offset": 59, "type": "<ALPHANUM>", "position": 11 }, { "token": "g", "start_offset": 59, "end_offset": 60, "type": "SYNONYM", "position": 12 }, { "token": "", "start_offset": 59, "end_offset": 60, "type": "<ALPHANUM>", "position": 12 } ] }
Mengisi data uji
Minta
_bulk POST http://localhost:9200/_bulk { "index": { "_index": "app", "_type": "product", "_id": 195111 } } { "name": " 10+30/ 10", "manufacturer": " ", "city_id": 1, "company_id": 2, "category_id": 1 } { "index": { "_index": "app", "_type": "product", "_id": 195222 } } { "name": " 10 +30 /: 10 ", "manufacturer": "", "city_id": 1, "company_id": 3, "category_id": 1 }
Memetakan Pencarian
Biarkan produk klien kami yang ingin kami temukan semua produk serupa dari kompetitor memiliki karakteristik
{ "name": " 10 +30 / 10 ", "manufacturer": " ", "city_id": 1, "company_id": 1, "category_id": 1 }
Menggunakan
direktori obat-obatan, kami memilih nama obat dari nama produk. Dalam hal ini, kata "Hyoxysone". Kata ini akan menjadi kriteria yang diperlukan.
Kami juga memotong semua angka dari nama - "10 30 10", mereka juga akan menjadi kriteria yang sangat diperlukan. Selain itu, jika nomor tertentu dimasukkan dua kali, itu juga akan muncul dua kali dalam barang yang ditemukan, kalau tidak kita akan meningkatkan kemungkinan kebetulan dengan barang yang salah.
Permintaan
_Search GET http://localhost:9200/app/product/_search { "query": { "bool": { "filter": [ { "terms": { "company_id": [ 2, 3, 4, 5, 6, 7, 8 ] } }, { "term": { "city_id": { "value": 1, "boost": 1 } } }, { "term": { "category_id": { "value": 1, "boost": 1 } } } ], "must": [ { "bool": { "should": [ { "match": { "name": { "query": " + / ", "boost": 1, "operator": "or", "minimum_should_match": 0, "fuzziness": "AUTO" } } } ], "must": [ { "match": { "name": { "query": "", "boost": 2, "operator": "or", "minimum_should_match": "70%", "fuzziness": "AUTO" } } }, { "match_phrase": { "name": { "query": "10 30 10", "boost": 2, "slop": 100 } } } ] } } ], "should": [ { "bool": { "should": [ { "match": { "manufacturer": { "query": " ", "boost": 1, "operator": "or", "minimum_should_match": "70%", "fuzziness": "AUTO" } } }, { "match": { "manufacturer": { "query": "alenta armacevtika ", "boost": 1, "operator": "or", "minimum_should_match": "70%", "fuzziness": "AUTO" } } } ] } } ] } }, "highlight": { "fields": { "name": {} } }, "size": 50 }
Pada output, kami mendapatkan id barang, serta skor + nama mereka untuk analitik, dengan fragmen yang cocok yang cocok.
- Hyoxysone 10 mg + 30 mg / g salep untuk penggunaan luar , tabung 10 g - Skor Algoritma: 69.84
- HYOXISON salep untuk pemakaian luar 10 mg + 30 mg / g : 10 g - Penilaian algoritma: 49.79
Kesimpulan
Metode yang dijelaskan tentu tidak akan memberikan akurasi pencocokan 100%, tetapi akan sangat memudahkan proses pencocokan barang secara manual. Juga cocok untuk tugas yang tidak membutuhkan keakuratan mutlak.
Secara umum, jika Anda meningkatkan permintaan pencarian Anda menggunakan heuristik tambahan dan meningkatkan jumlah sinonim, Anda dapat mencapai hasil yang mendekati memuaskan.
Selain itu, tes kinerja yang dilakukan pada i7 lama menunjukkan hasil yang baik. 10 permintaan pencarian dalam array 200.000 produk dilakukan dalam beberapa detik. Anda dapat melihat contoh obat langsung ini di
sini .
Sarankan opsi Anda, cara-cara mencocokkan dalam komentar.
Terima kasih atas perhatian anda!