2012-03-03 12 views
2

私は、スフィンクスの検索機能を使用する検索バーを使用して検索可能なコンテンツを持つサイトを持っています(スフィンクスのジオサーチ機能を使用するため)。ジオロケーションが検索文字列の部分文字列であるかどうかを確認

テーブルのフィールドが含まれます:

Id, title, description, tags, geolocation 

は、どのように私は、文字列の一部が地理的な場所への参照が含まれているかどうかを判断するについて行くことができますか?私が探している解決策はPHPで実行される可能性が高いので、通常通り私はSphinxを使って検索します。例えば

誰かが次のいずれかを検索した場合、:

Car parts in California 

Car parts near San Francisco 

90210 car parts 

それから所望の位置の特定の半径内car partsに一致するすべてのエントリのリストを返すことができるようにしたいです。

この問題を簡単にする方法については、何か提案があります。

注:ユーザーによるジオロケーションサブストリングの入力はオプションです。したがって、ソリューションは、その存在を判断し、それに応じて行動する必要があります。

+0

2つの質問、1.あなたがカバーする必要がある地域(米国、全世界)を教えてください。 2.多言語サポートが必要ですか? – AlexC

+0

@AlexC地理的な場所は世界中であり、大陸のように一般的なものでも、特定の検索クエリに入力された場所の地図をGoogleが返すような都市や郵便番号などの特定のものでもかまいません。多言語サポートに関しては、すべてが当面英語で行われます。 – ServAce85

答えて

2

は、あなたがこのために使用できるAPIがいくつかあります: -

http://developers.metacarta.com/api/ < Geodict

http://developer.yahoo.com/geo/placemaker/guide/web-service.html

を見て -

http://www.datasciencetoolkit.org/ <クエリパーサ

を見て..彼らはあなたのためにすべての "重い持ち上げ"を行います:)

代わりに、スフィンクス自体で自分を作ることができます!

は、データベーステーブルでそれをスティック、そしてそれにスフィンクスインデックスを作るhttp://www.geonames.org/

にgeonamesデータベースのコピーをダウンロードしてください。

次に、クエリ文字列を取得し、 'geo'テーブルに対してSPH_MATCH_ANYクエリを実行します。

次に、sphinx resultsetを見て、任意の場所を抽出します。placenameなしで新しいクエリを作成します。

このスフィンクス指数も、あなたが本当のクエリに使用できる地理座標を返します:)

(あなたが特に「内/近くを」気づくとちょうどそれらを削除するか、またはそれらを使用するかして、それを少し最適化することができ名札を明示的に識別する)

幸運を祈る!

(郵便番号の取り扱いも同様に行うことができます - 郵便番号も郵便番号を添えてくださいオンラインでダウンロード可能なコピーがありますか、

+0

私は+2ができることを望む。これはまさに私が探していたものと思われます。私は特にスフィンクスを使用するソリューションが大好きです。私はそれを試して待つことができません。ありがとう! – ServAce85

+0

私は彼に+2を与えます。これは私が考えていたラインに沿っていましたが、彼はそれをより良く、より早く行いました。 – AlexC

+0

クエリー 'Springfield、Illinois'の' geo'テーブルに対して 'SPH_MATCH_ANY'を実行すると、私はさまざまな' Springfield'の結果をさまざまな状態で受け取ります。明らかに、イリノイ州スプリングフィールドはリストの一番上にあります。上位の結果を選択すると、この例でも機能しますが、クエリごとに常に上位結果のみを選択する必要がありますか?ユーザーが複数の場所を入力するとどうなりますか?ちょうど提案を探しています。 – ServAce85

関連する問題