Am nevoie de ajutor de punere în aplicare un cuvânt cheie de căutare în Vasul cu Balon-msearch

0

Problema

Eu sunt, folosind versiunea 3.9 din python și încercarea de a crea un cuvânt cheie de căutare în cazul în care un utilizator poate introduce un șir de cuvinte cheie și că șir pot fi interogate în baza de date care conține siruri de caractere. Nu există erori în elaborarea și totul funcționează, dar rezultatul interogării nu este ceea ce mă aștept. În loc să se întoarcă toate rândurile care conțin cuvinte similare cu cuvinte cheie din coloana descriere returnează interogare în șir formă.

Acest lucru este meu init.py fișier:

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_msearch import Search
...
app = Flask(__name__)
searched = Search(app)
searched.init_app(app)
searched.create_index(update=True)
MSEARCH_INDEX_NAME =  os.path.join(app.root_path,'msearch')
MSEARCH_ENABLE = True
from .search import search as search_blueprint
app.register_blueprint(search_blueprint)

return app

Acest lucru este meu models.py fișier

class Service (db.Model):
    __searchable__  = ['description']
    provider_id     = db.Column(db.Integer, db.ForeignKey('provider.provider_id'), nullable=False)
    service_id      = db.Column(db.Integer, nullable=False, primary_key=True)
    rating_avg      = db.Column(db.Float(precision=2), nullable=False)
    service_name    = db.Column(db.String(20), nullable=False)
    cost            = db.Column(db.Float(precision=2), nullable=False)
    description     = db.Column(db.String(255), nullable=False)
    category        = db.Column(db.String(20), nullable=False)
    
    def __repr__(self):
        return 'String representation of Service'

Acest lucru este meu search.py fișier:


search = Blueprint('search', __name__)

@search.route('/search')
def searching():
    return render_template('search.html')

@search.route('/search', methods=['POST'])
def searching_post():
    searchInput = request.form.get('searchInput')
    results = Service.query.msearch(searchInput, fields= ['description'])
    return render_template('result.html', results=results)

Acest lucru este meu search.html fișier șablon:

{% extends "base.html" %}

{% block content %}
<div class="column is-8 is-offset-2">
    <h1 class ="title">
    Enter keywords and minimum rating
    </h1>
    <div class="box">
        <form method="POST" action="/search">
        <div class="field">
                    <div class="form-group">
                    <input class="input is-large" type="text" name="searchInput" placeholder=" " autofocus="">
                    </div>
                </div>
        <button class="button is-block is-info is-large is-fullwidth">Search</button>
         </form>
    </div>
</div>
{% endblock %}

Acesta este rezultatul atunci când mă căuta ceva în searchbar:

Results: SELECT service.provider_id AS service_provider_id, service.service_id AS service_service_id, service.rating_avg AS service_rating_avg, service.service_name AS service_service_name, service.cost AS service_cost, service.description AS service_description, service.category AS service_category FROM service WHERE (service.description LIKE '%' || ? || '%')!
elasticsearch flask python whoosh
2021-11-21 22:29:36
1

Cel mai bun răspuns

1

msearch returnează un Query obiect și atunci când imprimați results variabila vezi șir de reprezentare - de fond al sistemului de interogare SQL.

Pentru a obține rezultate efective trebuie să "execute", interogare, de exemplu

results = Service.query.msearch(searchInput, fields= ['description']).all()

Următoarele apeluri de metode ar provoca, de asemenea, execuție de fond al sistemului de interogare:

results = Service.query.msearch(searchInput, fields= ['description']).first()
results = Service.query.msearch(searchInput, fields= ['description']).one()
results = Service.query.msearch(searchInput, fields= ['description']).one_or_none()
2021-11-22 10:02:07

De fapt am dat seama de greșeală, este legat, dar mi-a fost dor de .toate() la sfârșitul rezultate = Serviciu.de interogare.msearch(searchInput, domenii= ['descriere']).toate()
Ali Khabib

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................