Estoy trabajando con jquery autocompletar y quiero devolver sugerencias incluso en la entrada de palabras parciales.
Ahora mismo tengo esta consulta
SELECT field FROM table WHERE MATCH (field) AGAINST ('$search_query*' IN BOOLEAN MODE)"); Funciona bien, pero a diferencia del MODO DE NATURAL LANGUAGE MODE BOOLEAN MODE tiene una mala clasificación de relevancia.
Así que estoy tratando de hacer que el comodín funcione en el modo de lenguaje natural. Hasta donde yo sé, no es compatible de forma predeterminada, pero ¿quizás se pueda hacer de otra manera? Como usar la función PHP, por ejemplo.
Estoy casi avergonzado de admitir esto, pero me enfrenté a un problema similar con la búsqueda de texto completo no indexado. Creé una tabla de base de datos con mi lista de palabras favoritas, 18 de las cuales se ven así:
+------+-------------+ | ID | WORD | +------+-------------+ | 2336 | Babble | | 2337 | Babbled | | 2338 | Babbling | | 2339 | Babian | | 2348 | Babied | | 2346 | Babies | | 2340 | Babion | | 2341 | Babiroussa | | 2342 | Babirussa | | 2343 | Baboo | | 2344 | Babu | | 2345 | Baby | | 2347 | Baby | | 2349 | Babying | | 2350 | Babylonic | | 2351 | Babylonical | | 2352 | Babyroussa | | 2353 | Babyrussa | +------+-------------+No es muy bonito, pero selecciona las palabras que comienzan con lo que el usuario escribe (PALABRA como 'bab%', como se muestra arriba para mi lista), excluyendo las palabras vacías, y luego las pasa a su búsqueda de lenguaje natural. Las listas de palabras están disponibles en muchos idiomas, si su aplicación no está en inglés. Puede agregar listas de nombres, etc., si lo desea.
Espero que esto funcione para usted.
SELECT MATCH (field) AGAINST ('$search_query' IN NATURAL LANGUAGE MODE) AS result FROM table;El comodín no funcionará para el modo de lenguaje natural, ya que es una instrucción que se usa en el modo booleano.
Debe usar las cláusulas HAVING y ORDER BY , ya que la función MATCH devuelve el puntaje de relevancia que usaría para ordenar los resultados ( order by ) y mantener solo los resultados distintos de cero ( having ).
SELECT field, MATCH (field) AGAINST ('$search_query*' IN BOOLEAN MODE) as score FROM table HAVING score > 0 ORDER BY score DESC;