2011-06-17 7 views
1

私はテーブルを設定している:MySQL - 関連性の高い順序で検索/選択しますか?次のように

 
userid year model color transmission interiorcolor wheels 
------------------------------------------------------------------- 
    1 2005 Fiesta Red MT    Black  Stock 
    2 2008 Monaro Red AT    Black  Stock 
    3 2005 F-150S Blue AT   Black + Red Stock 
    4 2008 Fiesta Green MT   Black  Stock 

は今、私はSQL検索(フルテキスト検索ではありません標準ビルド)を構築しています、と私は多少関連があるとの結果にしたいです。私が何を意味するか

は、たとえば結果がこの順で

ID#1、ID#2、ID#4

を出て、今「2008フェスタ」の誰かの種類、基本的なクエリであればということです

しかし、実際には、1つのフィールドではなく2つのフィールドでの検索が一致するため、#4は検索の先頭になります。

ありがとうございました!

答えて

0

に動作します。これは、粗であるが、それはあなたのために働く必要があります。

基本的に
SELECT id, SUM(Relevance) as SearchRelevance 
FROM(
SELECT id, 1 as Relevance 
FROM cars 
WHERE year = 2008 
UNION ALL 
SELECT id, 1 as Relevance 
FROM cars 
WHERE model='Fiesta') AS t 
GROUP BY id 
ORDER BY SUM(Relevance) DESC 

それはそれぞれの条件を検索し、それらをすべて一緒に結合し、関連性のSUMでそれらをグループ化します(ここで、 g項目)。

+0

しかし、モデルと年が分かれていると仮定しています。フルテキスト検索の場合はそうではありません。 – joakimdahlstrom

+0

@joakimdahlstrom - OPによると、 "全文検索で標準ビルドがありません"です。私はOPが何とかストリングの部分を分割すると仮定しています。これはおそらくPHPコードが入り込む場所です。 – IAmTimCorey

+0

うわーはうまくいきます!どのように私はそれを拡張することができたので、年とモデルのフィールドを実行するだけではなく、すべてのフィールド(とフィールドの実際のリストは実際に私がここに投稿したものよりも長いです)、また、検索テキストは「2008 red Fiesta」となります。あなたのSQLでは、関連するキーワードは既に割り当てられています。とにかく、現実の世界の検索要求のためにそれをより一般的に保つには?ありがとう! – Mark

0

私はあなたのselect文が似ていると思う:

LIKE %2008 Fiesta% 

は最後%を取って試してみてください、それは

+0

検索「Fiesta 2008」を使用すると、結果は空になりますか? – Arjan

1

このような目的でMySQLに頼るのではなく、Lucene(またはLuceneの上にあるSOLR)を使用してみてください。実際のデータをMySQLに保存することはできます。私が使用している一般的なセットアップは、SOLR/Luceneです。興味のあるエンティティのIDを取得するためにフルテキスト/関連性の検索を行い、その後MySQLを使用してそれらのエンティティの実際のデータを取得します。 SOLR/Luceneを使用すると、フルテキスト検索が可能になり、データの検索/注文方法に多くの機能が追加されます。また、ステミングなどの機能も提供されます。

+0

また、データセットのサイズによって異なります。小さなデータセットの場合、MySQLは重大な問題なしに検索を実行できます。大量のデータには、LuceneやXapianなどのオプションがあります。 – Arjan

+0

十分です。私は関連性について尋ねながら全文検索を述べたので、Luceneをオプションとして出しました。それらの2つは一緒に実際の検索エンジンに向かって私を指します。 – RHSeeger

関連する問題