2

ユーザーがメニュー項目を検索できる大規模なレストラン メニュー データベースがあります。言葉が並んでいるとユニークな料理になるアイテムがたくさんありますが、言葉は非常に一般的であり、いたるところに現れます。

例: ユーザーが「チーズ ステーキ」を検索したい場合、データベースで...「チーズ ステーキ」または「チーズ ステーキ」の可能性があります。

私の同義語ファイルには次のものがあります。

cheesesteak     => cheesesteak, cheese steak
cheese steak    => cheesesteak, cheese steak

「cheesesteak」を検索すると、有効な結果が得られます。「チーズステーキ」と「チーズステーキ」(言葉を並べて)のメニュー項目を取得します

しかし、「チーズ ステーキ」を検索すると、「ブルー チーズのステーキ サラダ」のように、チーズとステーキという単語が含まれるあらゆる種類の関連性のない結果が表示されます。

この同義語ファイルが機能するように構成する方法はありますか? ユーザーに引用符などの入力を強制したくありません。

4

2 に答える 2

1

あなたが探しているのは近接検索です。正しい順序と単語の距離でスコアが向上します。Solr FAQから

近接検索は、ずさんなフレーズ クエリで実行できます。ドキュメント内で 2 つの用語が近くにあるほど、スコアは高くなります。ずさんなフレーズ クエリでは、最大の「slop」、または一致を取得するためにトークンを移動する必要がある位置の数が指定されます。

標準リクエスト ハンドラのこの例では、「movie」の 100 語以内に「batman」が含まれるすべてのドキュメントを検索します。

q=text:"バットマン映画"~100

于 2012-06-27T16:04:49.070 に答える
0

あなたがすべきことは、edismax を使用して、ブースティングに最も関連性の高いドキュメントを表示させることです。ブースティングクエリまたはオプションのフレーズをすべての用語で追加する場合は、標準ハンドラーを使用してこれを行うこともできます+cheese +steak ("cheesesteak"^100 "steak cheese"^50)

于 2012-06-27T16:10:44.903 に答える