1

私のpython GAEアプリケーションでは、ユーザーが検索APIを使用してアイテムを照会できるようにしています。最初に正確なタグでドキュメントを入力しましたが、存在する必要があるスペル修正を考えると、ヒットはあまりありません。私が見つけた方法は、データストアを介して文字 ngram を実装することでした。これにより、ユーザーが単語の少なくとも一部を正しく入力できるようになります。データストアでは、これには多くの時間がかかります。例えば、

"hello"(に分割されます)["hello", "ello", "hell", "hel", "elo", "llo", "he", "el", "ll", "lo"]

そして、私が検索するとき"helo" tags -["hel", "elo", "he", "el", "lo"](肯定的な一致を与える)

単語から一致したタグの長さに従ってランク付けします。

Datastore では、これらの改行文字 ngram を、一致するエンティティとともに個別にインデックス化する必要があります。そして、単語ごとに、すべてのタグで同様の方法で検索を実行します。これには多くの時間がかかります。

検索 API を使用して同様の操作を実現する方法はありますか。MatchScore は「OR」の複数のフィールドを調べますか? 検索ドキュメントを設計し、最小限の操作で複数のスペル修正クエリを実行する方法を探しています。

たとえば、各ドキュメントに言語用の複数のフィールドがある場合-

([tags - "hello world"] [rank - 2300] [partial tags - "hel", "ell", "llo", "wor", "orl", "rld", "hell", "ello", "worl", "orld"] [english - 1] [Spanish - 0] [French - 0] [German - 0]

言語フィールドで並べ替えと一緒に MatchScore 操作を実行できますか? (各ドキュメントは 1 つの言語のみに関連付けられています)

4

1 に答える 1

2

Search APIはこれに適したサービスであり、データストアよりもはるかに適しています。検索ドキュメントに正しい言語が設定されている場合、Search API は特定の言語固有のバリエーション (単数形/複数形など) をカバーします。ただし、Search API は単語に対してのみ機能します (通常、スペース、ハイフン、ドットなどで区切られています)。

更新:言語はlanguage、フィールドのプロパティまたはlanguageドキュメント全体のプロパティで定義されます。いずれの場合も、値は2 文字の ISO 693-1言語コードです (例'de': German ) 。

検索語 (「hel」、「elo」など) をトークン化するには、次の回答のパターンを使用できます: https://stackoverflow.com/a/13171181/1549523 その回答に対する私のコメントも参照してください。ストレージ サイズとフロントエンドのインスタンス時間を回避するために最小限の長さのトークン (たとえば 3 文字以上) を使用する場合は、そこにリンクしたコードを使用できます。

MatchScorer は、ドキュメント内の特定の用語の頻度を重み付けするのに役立ちます。通常、タグはドキュメントごとに 1 回しか出現しないため、それは役に立ちません。ただし、たとえば、研究論文で「combustion」という用語を検索する場合、MatchScorer は結果をランク付けし、その用語が最も頻繁に含まれる論文を最初に表示します。

ファセット検索は、いわゆるファセットを検索クエリの結果に追加します。つまり、(デフォルトでは) 現在のクエリで最も頻繁に発生する 10 個のファセットも返されます。これはタグやカテゴリで役立つため、ユーザーはこれらの提案されたフィルターのいずれかを適用して検索をドリルダウンできます。

正しいスペルの検索語をユーザーに提案したい場合は、2 つのインデックスを使用するのが理にかなっています。1 つのインデックス、実際の検索ドキュメント (タグ付きの製品説明など) のプライマリ インデックスと、タグまたはカテゴリのみの 2 つ目のインデックス (トークン化され、最終的に類義語を含む)。ユーザーが検索フィールドに入力すると、アプリは最初に tag-index を照会し、一致するタグを提案します。ユーザーがそれらのいずれかを選択すると、タグを使用してプライマリ検索インデックスが照会されます。これは、ユーザーが正しいタグを選択するのに役立ちます。

もちろん、そのようなリストを維持している人がいる場合は、それらのタグを同義語も含めてデータストアで管理できます。また、タグが保存されるたびに、アプリはすべての文字 ngram (トークン) を含む対応する検索ドキュメント (セカンダリ インデックス内) を更新します。

于 2015-10-15T12:56:32.767 に答える