1

データベースを検索しているときに、本当に関連性の高い結果 (ブール検索で返されたもの) をランク付けしたいのですが、同時に、関連性の低い (ような) 結果を完全に除外したくありません。

現在、私のクエリは次のようになっています。

(SELECT *, MATCH (col1,col2,col3,col4) AGAINST (query* in boolean mode) AS score
FROM table where match(col1,col2,col3,col4) against (query* in boolean mode)
order by score DESC) 
   UNION (SELECT * from table where col1 like query 
          or col2 like query or col2 like query or col4 like query)

これは、指定された 2 つの選択句の列数が異なることを示すエラーを返します。これは、クエリの最初の部分に「スコア」が列として追加されているためだと理解しています。
この問題の回避策はありますか?

4

1 に答える 1

1

列エイリアスを使用して、偽の列スコアを 2 番目のクエリに追加するだけです。その値を使用する必要はありませんが、ユニオンが機能するようになります。例えば:

(SELECT *, MATCH (col1,col2,col3,col4) AGAINST (query* in boolean mode) AS score
FROM table where match(col1,col2,col3,col4) against (query* in boolean mode)
order by score DESC) 
UNION (SELECT *, 50 as score from table where col1 like query 
or col2 like query or col2 like query or col4 like query)

50 は、割り当てたい任意のデフォルト スコアに置き換えることができます。

于 2013-02-26T11:05:36.637 に答える