😸

Fuse.jsを使用した完全不一致検索の部分的な実現

2023/03/14に公開

概要

Fuse.jsはJavascript製の検索エンジンです。

https://fusejs.io/

フロントエンドのみで完結するアプリを作成する際の検索エンジンとして重宝しています。

今回、Fuse.jsを用いた完全不一致検索を実現するにあたり、クエリを工夫する必要があったため、その備忘録です。

高度な検索

Fuse.jsでは、完全・部分一致、部分不一致など、多様な検索が可能です。以下のページに記載があります。

https://fusejs.io/examples.html#extended-search

また、以下の記事で日本語訳が公開されています。

https://qiita.com/Sashimimochi/items/4972b3dc333c6e5fb866#より高度な検索

ただし、完全不一致検索については、クエリを工夫する必要がありました。

完全不一致検索

例えば、labelというフィールドに「悪党」という文字列を持たない検索は、以下のようなクエリで部分的に実現できました。「悪党で始まらない」または「悪党で終わらない」を検索しています。

{
	"$or": [
		{
			"label": "!^悪党" # 「悪党で始まらない」
		},
		{
			"label": "!悪党$" # 「悪党で終わらない」
		}
	]
}

ただし、上記のクエリは完全ではなく、「悪党と悪党」といった値を持つものも除外してしまう点に注意が必要です。

まとめ

誤った理解をしている点もありそうですが、参考になりましたら幸いです。

Discussion