4

たとえば、DBにテキストを含むレコードが"Hormel Corporation"あり、検索語が。のようなものであるとし"Hormel Corned Beef 16 Ounces"ます。"Hormel Corporation"私の現在の構成では、私が探しているものであっても、上位の結果は他のレコードになります。私の問題の解決策は、検索語の中で最も一致するレコードを優先することだと思います。すべてのドキュメントを読みましたが、これがどのように機能するかを理解するのに苦労しました。

フィールドは1つだけです-名前。欲しいレコードの名前欄には「HormelCorporation」と書いてありますが、「Hormel Corned Beef 16 Ounces」を検索すると、ISNTの「HormelCorporation」という結果になりますが、一見ランダムに見えますが、私は探しているのは結果の3番目または4番目です。

どうもありがとう!

4

2 に答える 2

5

解決すべき同様の問題がありました。そのため、データを多くのフィールドに保存しました。

title
keywords (upto 10 words)
abstract (a paragraph)
text (as long as you like)

クエリには、重みの異なるフィールドに対してdismaxクエリパーサーを使用しました。

title^20
keywords^20
abstract^12
text^1

だからあなたが

  1. データスキーマを適切に定義する
  2. dismaxを使用する
  3. クエリのフィールドごとの重みを決定する

「HormelCornedBeef16 Ounces」を検索すると、タイトルが「Hormel Corp」の結果は、本文に「...料理には、Hormel Corned Beef16Ouncesの缶をお勧めします...」というドキュメントのスコアが高くなります。


OPのコメントを編集します。

OPの事実は次のとおりです。n語のタイトルが与えられると、最初のn語が残りよりも重要になります。

title_first_wordsとの2つのフィールドがあるデータモデルを提案しますtitle。クライアントアプリケーション(申し訳ありませんが、DIHを直接使用することはできません)は、タイトルから最初のn語を抽出しtitle_first_wordsて保存する必要があり、完全なタイトルはに保存されtitleます。

検索の場合、クエリ全体をdismaxパーサーに渡すことができます。クエリパーサーは、likeにバイアスされていtitle_first_wordsますtitle_first_words^4 title^1。したがって、最初のn語は、特定の検索に大きな影響を与えます。

于 2012-02-02T07:29:27.230 に答える
0

次のような検索用語で各単語の重要性を高めようとしましたか。

Hormel^100 Corned^20 Beef^5 16^2 Ounces^1
于 2012-02-01T19:57:22.260 に答える