特殊文字とワイルドカード

トピック作成者:ks-solruserml-bot (2024/09/22 21:46 投稿)
2
OpenOpen

(The bot translated the original post https://lists.apache.org/thread/331l0602zcmh5f51nso19l0ltynb98dc into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

皆さん、こんにちは。

ドキュメントのフィールドに特殊文字(例:"-"、"@"、"/" など)を含むものがあります。このフィールドで検索を行う際に、奇妙な挙動に遭遇しました。皆さんの助けをいただけると幸いです。

次のようなドキュメントがあるとします:

{
"id":"id_number",
"content":"Hello World-Wide-Web"
}

この場合、content フィールド内で部分文字列を検索したいと考えています。ユーザーが「Hello World-Wide-Web」と入力したときに、そのドキュメントが見つかることを期待しますが、これは問題なく動作します。

通常であれば、このフィールドに string 型を使用することができます。しかし、典型的なユーザーは文字列全体を入力せずにドキュメントを見つけたいと思うことが多く、また大文字と小文字を区別しない検索を希望しています。

  • ここで注意点として、実際に記述されたクエリは必ずしもユーザーが入力したクエリではなく、生成されたクエリであることを理解してください。

そのため、string 型ではなく text 型を使用しています。これによりフィールドがトークン化されます。トークンは "Hello"、"World"、"Wide"、"Web" となり、ユーザーが "woRLd hELlo" と検索しても、トークンは順不同かつ大文字小文字を無視して見つかります。

これ自体はかなり良い動作ですが、私たちの場合、さらに不完全な検索でもドキュメントを見つけられるようにしたいと考えています。そのためにワイルドカード "*" を使用するのが良い方法だと考えました。

通常、ワイルドカードは問題なく動作します:

"content":(Hello wor*)

ユーザーが "hello wor" と入力すると、文章を終える前にドキュメントが見つかります。

しかし、今度はユーザーが「world-wide」と検索した場合です。

"content":world-wide

これはもちろんドキュメントを見つけます。しかし、ユーザーが2単語目を入力し終わる前に、ドキュメントが見つかることも期待されます。
ところが、

"content":world-wid*

は動作しません。私たちの仮定では、検索クエリはインデックス作成時に使用されたのと同じトークナイザーを使うはずです(だから "world-wide" が "world wide" と同じように動作します)。しかし、ワイルドカードを使った瞬間にこの仮定が崩れます。なぜかSolrはクエリのトークン化を行うことができなくなります。

もちろん、全ての特殊文字をスペースに置き換えることもできますが、それでは...

何が間違っているのでしょうか?特殊文字とワイルドカードを使用する際に考慮すべき点があるのでしょうか?

よろしくお願いします。

Dario Viva

返信投稿者:ks-solruserml-bot (2024/09/22 21:47 投稿)

しかし、これはあまりエレガントな解決策ではありません。検索文字列全体に対して「検索して置換」を行う必要があり、使用するトークナイザーによっては、異なる文字を置き換える必要が出てきます。

返信投稿者:ks-solruserml-bot (2024/09/22 21:47 投稿)

こんにちは、Dario

stringタイプは正確な一致やファセットに適していますが、textは少なくともトークナイズを行います。
ワイルドカード検索(*)は高コストで、あなたが経験したように良い結果を得られないことが多いです。
どのみち、検索時にのみワイルドカードを追加しているので、これは貧弱なオートコンプリートのようなものです。
あなたが求めているのは、オートコンプリートのソリューションのようですね。ngramsを試してみてください。
こちらから始めると良いでしょう:
https://blog.andornot.com/blog/advanced-autocomplete-with-solr-ngrams/

よろしく
Robi

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?