asearchのunicode対応
増井俊之.icon
https://gyazo.com/f6d420e04e6848d8b1915ad5cc5bcb33
UTF16をバイト列にしてマッチングしてるからだと思う
「増井」のUTF16をバイト表現すると [ 88, 151, 78, 149 ]になる
「売上」は[ 88, 242, 78, 10 ]になる
なるほどdaiiz.icon
なので、曖昧レベル2で「増井」が「売上」にマッチしてしまう!
これは大変良くナイ
Chromebookでnpm testが動かないのでテストできないのだが、ちょっと試してみてもらえるとありがたいデス
試しますdaiiz.icon
Helpfeelで使ってるasearchをnpmのかわりに上のを使ってみるといいと思う Helpfeelで問題なかったらテスト足してnpmにアゲるといいかな
Forkしてテストが通るようになりました 増井俊之.icon
ありがとうございます! daiiz.icon
これを使うと「増井」が「売上」にマッチしなくなると思うます
aearch.min.js を作るようになってないので注意
daiiz.icon
うまくいっていそう
ローカル版で「増井」を検索した様子
https://gyazo.com/b46d09c8c0c4b3f08b623a49d6c978f8
1件だけヒットしていて紛らわしいけれど、これは「増(やす)」に反応したと思われる。問題なし。
よかった! 増井俊之.icon
本番でも使いたいですね
どうやって本番に取り込むか、相談したいですdaiiz.icon
次の2案だと、どちらがよいでしょう?
案1. shokai.icon/node-asearchにPull Requestを出す
増井俊之.icon/node-asearch を少し手直ししてpull requestを出し、npm publishして更新する
こっちはバイト列での比較を行っているので、今回の変更は大きな仕様変更になる
それでいいのか?
単純にバイト列比較できたほうが嬉しいケースもありそう?
どんなケースですかね? 増井俊之.icon
具体的にはわからないのですが、特に無いなら問題ないなと思ってました daiiz.icon
案2. @notainc/node-asearch-utf16? のような新たなnpmにする
マルチバイト文字単位で比較できるバージョンという位置づけ
とりあえずはnpmじゃなくてローカルのJS使うのが安全では? 増井俊之.icon
Helpfeelで問題なさげならnpmに入れて大丈夫とか 増井俊之.icon
なるほど。masui/node-asearch/lib/asearch.js をそのままhelpfeelにコピペして使ってしまえばいいですねdaiiz.icon
そういうことっす 増井俊之.icon
了解です daiiz.icon
unicode非対応
全然関係ないページがヒットする (2021/5/23時点)
https://gyazo.com/c334a335437a626e7ac92b432c757db0
旅館の名前を曖昧に覚えている例
unicode対応したshokai.icon
「おんどや」で「おんやど」が検索できるようになった
https://gyazo.com/5edfabc10663d8a989c5a24b52a5f17c
「何でも」で「なんでも」「どこでも」「サルでも」「中二病でも」「死んでも」がヒットするようになった
https://gyazo.com/3875857becacc0949535b8b51cd44e6e
イとィ
https://gyazo.com/c79801620bf20c78dceccb5378039837
babelを通したほうがいい?shokai.icon
いきなりindex.jsをpackage exportしている
IE対応してないかもしれない構文がある
constとlet
関数の引数に代入
function match (str, ambig = 0)
helpfeelで必要があればdebug npmと同じ様にbabelを通してビルドしてください