# Buscar palabras de una cadena

**URL:** <https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795>\
**Category:** Velneo\
**Created:** [26 Abril, 2010 17:22 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795 "2010-04-26T17:22:24Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![joserb](https://avatars.discourse-cdn.com/v4/letter/j/ccd318/32.png) [@joserb](https://foros.velneo.com/u/joserb)\
**Post date:** [26 Abril, 2010 17:22 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/1 "2010-04-26T17:22:24Z")

</div>

Hola.

Estoy buscando una forma óptima de una especie de buscador web, donde localizar las distintas palabras en una tabla que tiene una descripción.

He montado una función que elimina los artículos y preposiciones pero no encuentro una función que desgrane las palabras en un array o similar.

¿Sabe alguien si existe algo? (para no romperme los cuernos a lo tonto)

Gracias.

---

<div class="post-metadata">

**Author:** ![innovadb](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/innovadb/32/5643_2.png) [@innovadb](https://foros.velneo.com/u/innovadb)\
**Post date:** [26 Abril, 2010 19:41 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/2 "2010-04-26T19:41:39Z")

</div>

Creo que es mucho mas simple de lo que haces.

&nbsp;

En la tabla creas un&nbsp; indice por palabras, le añades el/los campos necesarios y la lista negra de palabras que no quieras indexar.

&nbsp;

Si haces una busqueda por ese indice ya está.

&nbsp;

Si buscas pepito, tendrás una lista con todos los registros que contengan esa palabra, da igual que la tengan 1 ó 40 veces.

&nbsp;

Un saludo

&nbsp;

---

<div class="post-metadata">

**Author:** ![joserb](https://avatars.discourse-cdn.com/v4/letter/j/ccd318/32.png) [@joserb](https://foros.velneo.com/u/joserb)\
**Post date:** [27 Abril, 2010 08:14 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/3 "2010-04-27T08:14:32Z")

</div>

Gracias **innovadb** , como me imaginaba me estaba liando ;-)

Para una búsqueda de "todas las palabras" me funciona, pero para que me busque sólo algunas? ¿Se pueden utilizar expresiones regulares o similar?

Gracias de nuevo!!

---

<div class="post-metadata">

**Author:** ![innovadb](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/innovadb/32/5643_2.png) [@innovadb](https://foros.velneo.com/u/innovadb)\
**Post date:** [27 Abril, 2010 08:34 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/4 "2010-04-27T08:34:39Z")

</div>

En el componente de busqueda que usa el indice por palabras le puedes especificar si quieres que busque los registros que contengan todas las palabras o solo alguna de ellas con solo poner un 0 ó un 1.

&nbsp;

Mira la flecha en la imagen.

&nbsp;

Un saludo

[attachment=9391,932]

---

<div class="post-metadata">

**Author:** ![rafael-zaragoza](https://avatars.discourse-cdn.com/v4/letter/r/bbce88/32.png) [@rafael-zaragoza](https://foros.velneo.com/u/rafael-zaragoza)\
**Post date:** [27 Abril, 2010 10:53 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/5 "2010-04-27T10:53:04Z")

</div>

Esta opción valdría si queires buscar la intersección de palabras, es decir: Todos los registros que en dicho campo tengan todas las palabras.

Sin embargo, creo que lo que&nbsp;pretende **joserb2.yahoo** es tener un campo en el que poner varias palabras y que busque cualquier registro que contenga cualquiera de esas palabras en un campo determinado, ¿No es así?

---

<div class="post-metadata">

**Author:** ![innovadb](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/innovadb/32/5643_2.png) [@innovadb](https://foros.velneo.com/u/innovadb)\
**Post date:** [27 Abril, 2010 11:17 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/6 "2010-04-27T11:17:17Z")

</div>

Si ponemos un 0 en "Todas las palabras" hace precisamente eso, busca cualquier registro que contenga cualquiera de las palabras escritas.

&nbsp;

Ademas para poner los valores 0 ó 1 podemos usar una formula o una variable, con lo que podemos pasarle un parámetro a un proceso y que funcione de las dos formas.

&nbsp;

Un saludo

---

<div class="post-metadata">

**Author:** ![joserb](https://avatars.discourse-cdn.com/v4/letter/j/ccd318/32.png) [@joserb](https://foros.velneo.com/u/joserb)\
**Post date:** [27 Abril, 2010 11:30 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/7 "2010-04-27T11:30:11Z")

</div>

Sí, es lo que comenta rzaragoza, pero lo que indica innovadb funciona, con 1 localiza las que tiene todas las palabras y 0 algunas.

Lo que me pasa ahora es que diferencia singulares y plurales, es decir, si "migrañas" y en el campo hay "migraña" no lo da como ok. Creo que además tendré problemas con casos como "colores", si busco "color". Necesitaría el comodín \* o % ;-)

Gracias a los dos por vuestra atención!

---

<div class="post-metadata">

**Author:** ![innovadb](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/innovadb/32/5643_2.png) [@innovadb](https://foros.velneo.com/u/innovadb)\
**Post date:** [27 Abril, 2010 11:51 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/8 "2010-04-27T11:51:58Z")

</div>

Para los plurales puedes usar un indice por trozos, el unico inconveniente es que el numero de resultados puede ser mayor de lo esperado.

&nbsp;

Si buscas "color" aparecerán colores, coloreado, coloreando etc.. pero igual te sirve.

&nbsp;

Un saludo

---

<div class="post-metadata">

**Author:** ![joserb](https://avatars.discourse-cdn.com/v4/letter/j/ccd318/32.png) [@joserb](https://foros.velneo.com/u/joserb)\
**Post date:** [27 Abril, 2010 11:57 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/9 "2010-04-27T11:57:49Z")

</div>

**innovadb** , Precisamente es lo que me puse a comprobar y efectivamente es la solución.

Tendré dos botones, uno para buscar todas las palabras, utilizando el índice por palabras y otro para buscar por algunas palabras para lo que se utiliza el índice por trozos.

Muchas gracias de nuevo!!

---

<div class="post-metadata">

**Author:** ![joserb](https://avatars.discourse-cdn.com/v4/letter/j/ccd318/32.png) [@joserb](https://foros.velneo.com/u/joserb)\
**Post date:** [27 Abril, 2010 14:41 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/10 "2010-04-27T14:41:46Z")

</div>

Uhm, tengo que corregirme, no va del todo bien.

Al buscar por trozos me encuentra partes de las palabras que haya buscado pero no "algunas", si no todas! con lo que se reduce el resultado.

Un ejemplo:

&nbsp; Tengo datos donde se buscará con las siguientes cadenas:

> &nbsp;&nbsp; Hojas de colores con tonos azules  
> &nbsp;&nbsp; Color azul  
> &nbsp;&nbsp; Hoja arrugada color azul

Si hago una búsqueda por "hoja color", sólo me salen dos resultados, ignorándome el segundo item pues no tiene la palabra hoja.

Yo lo que busco es que encuentre cualquiera de ellas. Para una búsqueda más estricta tendría la búsqueda por el índice por palabras.

Espero haberme explicado

---

<div class="post-metadata">

**Author:** ![jorge-velasco](https://avatars.discourse-cdn.com/v4/letter/j/3bc359/32.png) [@jorge-velasco](https://foros.velneo.com/u/jorge-velasco)\
**Post date:** [27 Abril, 2010 14:48 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/11 "2010-04-27T14:48:52Z")

</div>

Buenas.

Si buscas por trozos la cosa es que no puedes elegir si quieres o no todas las palabras por lo que al poner mas palabras va cruzando.

Lo mejor es buscar por palabras y poniendo a cero el que busque por todas las palabras.

Pd: Mira que es fácil controlarlo con este valor y yo haciendo búsquedas complejas ;)

Un saludo.

&nbsp;

&nbsp;

&nbsp;

**Jorge Velasco Fernández**

**jvelasco@theseedsc.com**

**www.theseedsc.com**

---

<div class="post-metadata">

**Author:** ![innovadb](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/innovadb/32/5643_2.png) [@innovadb](https://foros.velneo.com/u/innovadb)\
**Post date:** [27 Abril, 2010 15:19 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/12 "2010-04-27T15:19:13Z")

</div>

A ver si esto te sirve.

&nbsp;

En un proceso creas una cesta local, y por cada trozo a buscar disparas una busqueda y añades los registros a la cesta. Despues la procesas y ya está.

&nbsp;

Te adjunto una imagen aun que no lo probé.

&nbsp;

Un saludo

[attachment=9405,934]

---

<div class="post-metadata">

**Author:** ![joserb](https://avatars.discourse-cdn.com/v4/letter/j/ccd318/32.png) [@joserb](https://foros.velneo.com/u/joserb)\
**Post date:** [28 Abril, 2010 08:36 UTC](https://foros.velneo.com/t/buscar-palabras-de-una-cadena/1795/13 "2010-04-28T08:36:45Z")

</div>

Bueno, parece que está pero con matices, os explico:

El índice por trozos no tiene Lista Negra, corregirme si me equivoco, con lo que se me vuelve a presentar el problema de las preposiciones, etc., por lo que he vuelto a tirar de la función que hace ese trabajo y "limpia" la cadena a buscar.

El resto, más o menos lo indicado por **innovadb** salvo que no utilizo la cesta, si no que envío directamente a la rejilla donde muestro las coincidencias.

También he sacado el "Crear manejador" fuera del bucle, pues me imagino que instanciará un objeto cada vez que se llama lo que consumirá recursos (es todo conjeturas mías).

Comentar que dentro del bucle modifico la variable global BUSCA\_ALFA pues es la que utiliza el buscador.

PD. Sigo haciendo pruebas pero creo que está bastante afinado.

Saludos y gracias de nuevo a todos!!

[attachment=9410,935]
