アルとAlgoliaと私 / alu_algolia

アルとAlgoliaと私 / alu_algolia

2019-05-14 Algolia Community Party in Tokyo

Af79a541ea6541b4980c383e3968c58a?s=128

Hikaru Tooyama

May 14, 2019
Tweet

Transcript

  1. 1 ΞϧͱAlgoliaͱࢲ  Ξϧגࣜձࣾɹԕࢁߊ !WFYVT

  2. 2 ࣗݾ঺հ - Ξϧגࣜձࣾ ԕࢁߊ (@vexus2) - ݱ৬Ͱ͸ VP of

    Product - גࣜձࣾStorm ୅දऔక໾ - ։ൃίϯαϧςΟϯάۀ(Firebaseͱ͔) - ݩʑBackend(Ruby/PHP)͕ͩ࠷ۙ͸FrontendدΓ - TypeScript / Vue / Nuxt / Firebase ͳͲ - Algoliaྺ͸1೥6ϲ݄͘Β͍ - ݸਓαʔϏε࡞Δͱ͖͸ຖճAlgoliaʹσʔλΛೖΕΔͱ͜Ζ͔Β࢝ΊΔ ͘Β͍ͷAlgoliaґଘ঱Ϣʔβ - झຯ͸ϚϯΨΛಡΉ͜ͱ - ࠓ೥ಡΜͰ໘ന͔ͬͨ΋ͷ͸ʮਖ਼௚ෆಈ࢈ʯʮఱࠃେຐڥʯʮΞΫλʔδϡʯʮONE OUTSʯʮϥϯ ΢ΣΠͰসͬͯʯʮͦͷணͤସ͑ਓܗ͸࿀Λ͢ΔʯʮαπϦΫϧʔτʯʮͬ͠Άͷ੠ʯʮ೾Αฉ͍ͯ͘Εʯ ʮ࿡ಓͷѱঁͨͪʯʮβɾϑΝϒϧʯʮ௄໾339೥ʯʮϰΟϯϥϯυɾαΨʯ
  3. 3 ࣗݾ঺հ ແྉͰఏڙ͞Ε͍ͯΔອըΛूΊͨʮອըϏϨοδʯΛݸਓͰӡӦɻ ϐʔΫ࣌ͷաڈ30೔ؒͰ1060ສPV͕͋ΓɺͦͷޙΞϧ΁Ϧϒϥϯυɻ Xxx ίϛϡχςΟ GoogleͰʮອըଜʯͰݕࡧ͢Δͱ1Ґʹ Yahoo!χϡʔεͷτοϓʹ(هࣄݩɿITmedia)

  4. 4 Ξϧͱ͸ʁ W

  5. 5 Ξϧʹ͍ͭͯ Ξϧ͸ϚϯΨϑΝϯͷͨΊʹɺϚϯΨΛൃݟͰ͖ΔศརͳαʔϏεΛఏڙ͢Δ ϚϯΨ୳͠ͷ৘ใαʔϏεͰ͢ɻ iOS/Web൛ΛͦΕͧΕఏڙதɻ(Android͸΋͏͙͢!)

  6. 6 Ұ෦ͷϚϯΨͷίϚ͕౤ߘɾӾཡ͕Ͱ͖·͢ɻ ֤ग़൛ࣾʹ௚ʹڐ୚Λ΋Β͍ͬͯΔͷͰɺ ߹๏తͳίϚͷ౤ߘɾӾཡ͕Ͱ͖ΔαʔϏεͰ͢ɻ Ξϧʹ͍ͭͯ

  7. 7 શੈքதʹʮϚϯΨͷσʔλϕʔεʯͱ͍͏΋ͷ͕ଘࡏ͠ͳ͍ͷͰɺͱʹ͔͘େྔ ͳϚϯΨσʔλΛటष͘ूΊ͍ͯΔσʔλϕʔεͱͯ͠ͷଆ໘΋͋Γ·͢ɻ ʢΫϩʔϥʔɾೖߘɾਓྗͳͲʣ Ξϧʹ͍ͭͯ

  8. 8

  9. 9 FirestoreͱAlgoliaͷڞଘ W

  10. 10 Firestoreͷલఏ 1. Firestore͸FirebaseͷυΩϡϝϯτࢦ޲ܗͷεέʔϥϒϧͳNoSQL 2. Queryׂ͕ͱශऑ - `<` >` `==`

    `>=` `<=` ͸࢖͑Δ - != (not equal) ͕ ࢖͑ͳ͍ 3. limit, offsetͷΑ͏ͳ͜ͱ͕Ͱ͖ͳ͍(startAfter, startAt)ͷͰɺ
 ϖʔδωʔγϣϯͰͷpage=2ͷΑ͏ͳURLͷߏங͕ࠔ೉
  11. 11 Firestoreͷલఏ 4. औಘ଎౓͸ܶతʹ͸଎͘ͳ͍ɻ ࣮ߦ؀ڥ ॳճ 2ճ໨Ҏ߱ us-central 1݅औಘ 892.3ms

    202.3ms 20݅औಘ(SubCollection) 864ms 260.8ms asia-northeast1 1݅औಘ 370.3ms 125.6ms 20݅औಘ(SubCollection) 461.3ms 156.4ms ࢼߦճ਺100ճఔ౓ͷ؆қతͳϕϯνϚʔΫͰͷฏۉ஋ɻ ࣮ߦωοτϫʔΫ؀ڥͳͲʹΑͬͯมΘΔ͕ࢀߟ·Ͱɻ
  12. 12 Firestoreͱͷ࢖͍෼͚

  13. 13 Firestore or Algolia? - ͋͘·Ͱσʔλϕʔεͱͯ͠͸Firestore͕Ϛελ - UniqueͳIDΛࢦఆͯ͠Ұҙʹऔͬͯ͜ΕΔ৔߹ʹ͸Firestore - ୯ҰϑΟʔϧυͰͷSort΍QueryͰऔͬͯ͜ΕΔ৔߹ʹ͸Firestore

    - ෳࡶͳQuery৚݅΍ಛघͳSort৚݅(offsetͱ͔΋ؚΉ)ɺPaginationΛؚΉ৔ ߹ʹ͸Algolia - (Web൛ͳͲͰ)σʔλऔಘͷ଎౓ΛٻΊΔͱ͖ʹ͸Algolia
  14. 14 Ͳ͏͍͏σʔλΛAlgoliaʹ ৐͚ͬΔ͔

  15. 15 σʔλొ࿥ʹ͍ͭͯ - Algolia͸ݕࡧ਺ͱ͸ผͰϨίʔυ਺Ͱͷ՝ۚ΋͋ΔͷͰʮݕࡧʹඞཁͳ࠷ খݶͷςʔϒϧʯͷΈొ࿥ - λΠϛϯά͸Cloud Functions(Firebase)ͰFirestoreͷߋ৽τϦΨʔͷؔ਺ Ͱɺߋ৽͞ΕͨσʔλΛAlgoliaʹొ࿥͍ͯ͠Δ -

    σʔλෆ੔߹͕ΠϠͳͷͰɺجຊతʹ͸Firestoreͱಉ͡σʔλΛAlgolia ଆʹίϐʔ͢Δ
  16. 16 Algoliaͷخ͍͠ͱ͜Ζ W

  17. 17 خ͍͠ͱ͜Ζ: ͱʹ͔͘଎͍ - ͱʹ͔͘Response͕଎͍ɻΘ͚͕Θ͔Βͳ͍͘Β͍ʹɻ - 1೥୯ҐͷMonitoring reportݟͯ΋ɺaverage 1ms /

    99th percentile 3ms ͱ͔͕βϥʹ͋Δ - աڈ1೥ͰҰ൪஗͔ͬͨͷ͕ average5ms / 99th percentile 16ms
  18. 18 خ͍͠ͱ͜Ζ: ݕࡧΦϓγϣϯ͕๛෋ - ׬શҰகɺશจҰகͳͲͷݕࡧΦϓγϣϯ͕๛෋ͳͷͰʮHIT਺͸ݮΒͯ͠ Ͱ΋ਫ਼౓ͷߴ͍ݕࡧαδΣετʯͷΑ͏ͳ͜ͱ͕ϩδοΫଆͰௐ੔͠΍͢ ͍ - `matchLevel` ͱ͍͏ύϥϝʔλ͕ฦ͞ΕΔͷͰ׬શҰகͷ౓߹͍Λ൑அ

    Ͱ͖Δ - ʮDEATH NOTE (େ৔͙ͭΈɾখാ݈)ʯͷஶऀؔ࿈࡞඼ͱͯ͠ҎԼͷΑ͏ ͳ੍ޚָ͕ʹͰ͖Δ - ʮόΫϚϯ(େ৔͙ͭΈɾখാ݈)ʯ͸දࣔ͢Δ - ʮϓϥνφΤϯυ(େ৔͙ͭΈɾখാ݈)ʯ͸දࣔ͢Δ - ʮώΧϧͷޟ(΄ͬͨΏΈɾখാ݈)ʯ͸දࣔ͠ͳ͍ - ʢදࣔ͢Δɺͱ͍͏Φϓγϣϯ΋༰қʹͰ͖Δʣ
  19. 19 خ͍͠ͱ͜Ζ: Web্Ͱ΄ͱΜͲΧελϚΠζͰ͖Δ - ݕࡧର৅ͷΧϥϜ໊ɺrank෇͚ɺσϑΥϧτιʔτɺtypoܥͷڐ༰ൣғɺ Synonym(ಉٛޠ)ɺ۠੾Γจࣈઃఆɺϖʔδωʔγϣϯઃఆɺresponse ϑΟʔϧυઃఆɺetc… ͕Web্͔ΒઃఆͰ͖Δ

  20. 20 خ͍͠ͱ͜Ζ: ͍͍ײ͡ͷϨϙʔτ͕σϑΥϧτͰऔΕΔ - ೔ຖͷݕࡧ਺΍ No Result Rate, ্Ґݕࡧ΍ No

    Result Search ͷ݁ՌͳͲ ͕Index୯ҐͰࣗಈతʹAnalyticsʹೖ͍ͬͯΔɻ - Ξϧͷ৔߹͸ʮݕࡧͰHIT͠ͳ͔ͬͨϚϯΨʯͷ্ҐΫΤϦΛݩʹσʔλͷ ֦ॆͳͲͷ؍఺Ͱ࢖͓͏ͱ͍ͯ͠Δ
  21. 21 AlgoliaͷͭΒ͍ͱ͜Ζ W

  22. 22 ͭΒ͍ͱ͜Ζ: ೔ຊޠදهΏΕ͕བྷΉ΋ͷ͸ݸผରԠ - ೔ຊޠͷΏΒ͗͸ͦ͜·ͰNo CustomizeͰ͸ڧ͘͸ͳ͍ͷͰɺ౎౓ SynonymΛઃఆ͢Δඞཁ͕͋Δ - ONE PIECEΛʮϫϯϐʔεʯʮΘΜͽʔ͢ʯʮƂƃűƅʯʮONEPIECEʯ

    ʮϫϯͽʯΈ͍ͨʹදهΏΕ͕େ͖͍ͱσϑΥϧτͷঢ়ଶͰ͸໨తͷ΋ ͷ͕HIT͠ͳ͍ - ΞϧͰ͸Synonym͸࢖ΘͣʹϚϯΨͷʮུশʯʮදهΏΕʯٵऩ༻ͷΧ ϥϜ(alias)Λผ్ఆٛͯ͠Algoliaଆʹ΋ಉظ͍ͤͯ͞Δɻ
  23. 23 ͭΒ͍ͱ͜Ζ: filterपΓ͕ෳࡶ - ORݕࡧ΍ANDݕࡧͳͲ৚݅Λࢦఆ͢Δʹ͸filterΛ࢖͏͜ͱʹͳΔ͕ɺएׯ Ϋη͕͋ͬͯ࠷ॳ͸෼͔ΓͮΒ͍ɻ - ৚݅(filter)Λࢦఆ͢Δ৔߹ʹ͸ࣄલʹ Facet(attributesForFaceting)Λઃఆ ͢Δඞཁ͕͋Δ

    - AND ΍ OR ͸filtersͷதͰϕλͰॻ͘ඞཁ͕͋ΔɻएׯՄಡੑ͸ѱ͍ɻ - Boolean ܕ ΛFilter৚݅ʹೖΕΔͱ͖ʹ͸ true/false Ͱ͸ͳ͘ 1/0 Ͱ౉͢ ඞཁ͕͋Δ
  24. 24 ͭΒ͍ͱ͜Ζ: Φϓγϣϯܥ͕߲໨͕ଟ͍ - QueryपΓ΋Φϓγϣϯ͕๛෋ʹ͋ΔͷͰɺͰ͖Δ͜ͱΛશ෦೺Ѳ͢Δͷ͕ େมɾɾɾ - prefixType? advancedSyntax? optionalWords?

    ͳʹͦΕʁঢ়ଶʹͳΔ - ෳ਺ͷΦϓγϣϯઃఆͨ͠ͱ͖ʹͲ͏͍͏݁ՌʹͳΔͷ͔ʁ͕౤͛Δલ ʹ૝૾͠ʹ͍͘͜ͱ͕ଟ͍ɻͷͰɺͻͨ͢Βࢼ͢͜ͱ͕ଟ͍ɻ - ͱʹ͔͘ࡶʹσʔλΛಥͬࠐΜͰऔಘ͢Δ͚ͩͳΒ௒؆୯ɻෳࡶͳ͜ͱ΍ Ζ͏ͱ͢ΔͱυΩϡϝϯτΛख़ಡ͢Ε͹େମͳΜͱ͔ͳΔɻ
  25. 25 ͭΒ͍ͱ͜Ζ: Ϣʔβ͝ͱͷηΩϡΞͳσʔλ - جຊతʹ͸શϨίʔυ͕ݕࡧର৅ʹͳΔͷͰɺྫ͑͹ʮϢʔβ͝ͱͷߪೖ ཤྺʯͳͲଞऀͷݕࡧ݁Ռʹදࣔͨ͘͠ͳ͍΋ͷ͸ѻ͍ʹ͍͘ - Solutionͱͯ͠͸ʮࣗ਎ͷߪೖͨ͠΋ͷ͔͠ݟ͑ͳ͍(=ৗʹࣗ෼ͷuserIdͰ ϑΟϧλ)ʯݕࡧʹͳΔAlgoliaͷAPI_KEYΛϢʔβ͝ͱʹൃߦ͢ΔॲཧΛ༻ ҙͯ͠ɺϢʔβ͝ͱʹ֤ࣗͷΩʔͰݕࡧ͢ΔΑ͏ʹ͢Ε͹Մೳ

    - ॲཧ͕͔ͳΓ൥ࡶʹͳΔ͠API_KEYͷऔΓճ͠Ͱ࣌ؒऔΒΕΔͷͰ Algoliaͷ଎౓͕٘ਜ਼ʹͳΔͷͰɺ͋·Γϕλʔͳײ͡͸͠ͳ͍ https://firebase.google.com/docs/firestore/solutions/search?hl=ja
  26. 26 ·ͱΊ W

  27. 27 ·ͱΊ - ଎͍ɾ௿Ձ֨ʢ͔Β࢖͑Δʣɾߴػೳͱࡾഥࢠἧ͍ͬͯΔɻݸਓن໛Ͱ΋ શવ࢖͑Δ஋ஈଳʢͱ͍͏͔Freeϓϥϯ΋͋ΔʣͳͷͰϢʔβɾγεςϜ ಺໰Θͣݕࡧͱ͍͏ߦҝΛߦ͏αʔϏεͰ͋Ε͹࢖Θͳ͍ཧ༝͸ͳ͍ɻ - Algolia͸௒଎͍͔Βͦ͜ґଘੑ͕ߴ͍αʔϏεͳͷͰɺͲΜͲΜϨίʔυ ೖΕͯΨϯΨϯݕࡧ͢Δͱ͓஋ஈ͸ͦͦ͜͜ߴ͘ͳΓ͕ͪɻ͝ར༻͸ܭը తʹ

  28. 28