0

Sphinx 検索エンジンを使用するプロジェクトに取り組んでいます。しかし、私が気付いたように、Sphinx のドキュメントは膨大ですが、理解するのは困難です。

そのため、WHERE 句を使用して MATCH ステートメントをフィルタリングする方法に関する情報を見つけることができませんでした。私がまだ試したことは次のとおりです。

"SELECT *, country FROM all_gebrauchte_products WHERE MATCH('@searchtext (".$searchQuery.")') AND country='".$where."' ORDER BY WEIGHT() DESC LIMIT ".$page.", ".$limit." OPTION ranker=expr('sum(lcs)')"

country=$where 句なしで使用すると、さまざまな国からの多くの GUID が返されます。したがって、どういうわけか国列をフィルタリングする必要があります。

上記のステートメントを使用すると、エラーが発生します。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 index all_gebrauchte_products: parse error: unknown column: country'

しかし、私は次のようにインデックスを設定しました:

sql_query_range = SELECT MIN(gebr_id), MAX(gebr_id) FROM all_gebrauchte_products
sql_range_step = 10000
sql_query = \
            SELECT a.gebr_id AS guid, 'products' AS data_type, a.gebr_products AS products, a.gebr_user AS username, a.gebr_date AS datadate, CONCAT(a.gebr_hersteller,' ', a.gebr_modell,' ', a.gebr_ukat,' ', a.gebr_kat,' ', a.gebr_bemerkung) AS searchtext, a.gebr_bild1 AS image1, a.gebr_bild2 AS image2, a.gebr_bild3 AS image3, a.gebr_bild4 AS image4, a.gebr_bild5 AS image5, b.h_land AS country, b.h_web AS weblink, b.h_firmenname AS company, b.h_strasse AS street, b.h_plz AS zipcode, b.h_ort AS city, a.gebr_aktiv AS active \
            FROM all_gebrauchte_products a, all_haendler b \
            WHERE a.gebr_user = b.h_loginname AND a.gebr_id>=$start AND a.gebr_id<=$end
sql_attr_uint = active

誰が何がうまくいかないのか教えてもらえますか? または、どのように国をフィルタリングする必要がありますか?

サンクス。あなたの助けのために事前に。

4

1 に答える 1

1

sql_queryATTRIBUTE を作成しない列は、自動的に FIELD になります (ただし、最初の列は常にドキュメント ID です)。

FIELD は「全文」索引付けされており、クエリで照合できるものです。つまり、MATCH(...) 句です。

ATTRIBUTES は、WHERE で「フィルタリング」できるもの、ORDER BY でソートしたもの、GROUP BY でグループ化したもの、または SELECT で取得したもの (またはランキング式で使用したもの) です。

したがってcountry、WHERE フィルターで使用できるようにするには ATTRIBUTE である必要があります。

あなたは言いませんが、それは文字列だと思います。sql_field_string列を全文クエリできるようにしたい場合は、列を FIELD と ATTRIBUTE の両方にするために使用できます。

(また、文字列であるため、最新バージョンの sphinx が必要です。Sphinx は、文字列属性でフィルタリングする機能を最近獲得したばかりです)

于 2015-11-27T09:23:57.433 に答える