2016-07-07 11 views
0

Flask、MongoDB、およびjQuery Autocompleteを使ってオートコンプリート検索を構築しようとしています。ユーザーが検索バーに入力すると、そのアドレスのリストを表示する必要があります。たとえば、ユーザーが123 Fと入力した場合、その文字列に基づいて5つのよく似たアドレスを表示したいとします。リストからアドレスを選択すると、同じCSVテーブルの一部である、そのアドレスに関連付けられているいくつかの属性を表示したいと思います。Flask、MongoDB、jQueryを使ってオートコンプリートを構築する

私はこのように構成されているアドレスの簡単なCSVファイルを持っている:私は持っていないものの

mongoimport --db myDB --collection myAddresses --file "/path/to/file" --type csv --headerline 

:私が最初にこのCSVは、次のコマンドを使用して、MongoDBのにファイルをインポート

ID ADDRESS 
1 123 Fakevill St 
2 35 Lakeshore Rd 
.. and so on 

をクライアント側で作業を始めましたが、私はサーバー側でいくつかの問題にぶつかってきました。私のサーバー側の正規表現のクエリは結果を返しません。ここで私はフラスコでそれを設定している方法です。

@app.route('/getInfoByAddress', methods=['GET']) 
def getInfoByAddress(): 
    searchedAddress = request.args.get("Address") 
    addressCollection = myDB["addresses"] 
    addressJSON = [] 
    regex = "/^" + searchedAddress + "/" 

    for address in addressCollection.find({'Address': re.compile(regex, re.IGNORECASE)},{"Address":1, "ID":1, "_id":0}): 
     addressJSON.append({"Address":address["Address"]}) 
    return jsonify({"Addresses":addressJSON}) 

私はオートコンプリートとタイプのケースに対処するregexreの組み合わせを使用しています。私はmyapp.dev:5000/getInfoByAddress?Address=123 F、クエリをテストするために、私のブラウザに行く時現在、それは空のJSONを返す:私はprint regexを行うと、私はコマンドラインでデータベースに送信され、適切な文字列(/^123 F/)を

{ 
    "Addresses": [] 
} 

見ることができます残念ながら私は結果を見ていません。

+0

'addressCollection.find(...)は何を返しますか?データが正しくロードされていますか?あなたはDBから何かを得ることができますか? – IanAuld

+1

あなたのクエリが正しくないようです:http://stackoverflow.com/questions/3483318/performing-regex-queries-with-pymongo – IanAuld

+0

コマンドラインで、 'db.addresses.find()。limit(5)を実行すると、 ) '、私はアドレスのリストを見ることができるので、データがそこにあります。 – mapr

答えて

0

これはあなたが探している解決策ではないかもしれませんが、機能はまさにあなたがしたいことです。 Select2には、ajaxによるオートコンプリート・リモート・データ・ローディング機能があり、実装が非常に簡単で、あなたの人生を楽にするかもしれません。

https://select2.github.io/examples.html リモートデータを読み込んでgithubの例で再生するまでスクロールします。

編集:

バックエンドの問題は多くのものの1つになる可能性があります。アドレスを取得しているので[:]エンドポイントが正しく設定されているだけで、リクエスト前にデータがいっぱいになっていません。サーバー側のエラーメッセージはありますか?配列に追加する前に、forループの開始直後にアドレスを印刷し、そこにデータがあるかどうかを確認してください。それは多くのものの一つかもしれません。クエリ自体に問題があり、データが返されません。データは期待している形式ではなく、辞書のキーの問題がある可能性があります。私はしばらくの間、モンゴーと仕事をしていないので、これは暗闇の中でのショットです。試してみてくださいfor address in addressCollection.find({'Address': re.compile(regex, re.IGNORECASE)}).fetch():

+0

これはフロントエンドにとっては良い解決策ですが、私は現在、バックエンドでクエリを設定することに苦心しています。 – mapr

+0

サーバー側のエラーはありません。私は、ループの開始後、配列に追加する前にアドレスを印刷しようとしましたが、コンソールに何も印刷されません。クエリの{{"Address":1、 "ID":1、 "_id":0} 'にこれを含めるために上記のループコードで修正しました。また、あなたが提案した行を試してみると、 '' Cursor 'オブジェクトに属性' fetch 'がないと言うエラーが出ます。 – mapr

+0

findメソッドを呼び出すたびに自動的にオブジェクトをフェッチし、カーソルオブジェクトに結合するため、 'Cursor'オブジェクトはfetch属性を持ちません。 –

関連する問題