query - lucene vs elasticsearch
Campo que tiene mĂșltiples valores distintos (3)
Estoy construyendo una API de "Búsqueda de libros" usando Lucene. Necesito indizar los campos Nombre del libro, Autor y Categoría del libro en el índice Lucene.
Un solo libro puede clasificarse en varias categorías distintas de libros ... por ejemplo:
BookName1 - ficción, humor, filosofía. BookName1 - ficción, ciencia. BookName1 --humor, negocios. BookName4-humor y así sucesivamente .....
El usuario debería poder buscar todos los libros bajo una categoría particular, decir "homour".
Dada esta situación, ¿cómo indexo los campos anteriores y construyo la consulta en lucene?
Puede crear un campo simple de "categoría", donde enumere todas las categorías para un libro separado por espacios.
Luego puedes buscar algo como:
stock market AND category:(+"business")
O si desea buscar en más de una categoría
stock market AND category:(+"business" +"philosophy")
Yo usaría Solr en su lugar - está construido en Lucene y administrado por ASF, pero es mucho, mucho más fácil de usar que Lucene, especialmente para los recién llegados.
Si ofrece prácticamente todas las características principales de Lucene (sin duda todo lo que necesitará para el proyecto que describe), además de elementos adicionales como instantáneas, replicación, esquemas, ...
En Solr, simplemente definiría los campos que desea indexar algo como esto en schema.xml
:
<field name="book_id" type="string" indexed="true" stored="true" required="true" multiValued=''false''/>
<field name="book_name" type="text" indexed="true" stored="true" required="true" multiValued=''false'' />
<field name="book_authors" type="text" indexed="true" stored="true" required="true" multiValued=''true'' />
<field name="book_categories" type="textTight" indexed="true" stored="true" required="true" multiValued=''true'' />
Tenga en cuenta que el multiValued=''true''
permite pasar una matriz o lista a este campo, que Solr divide e indexa muy bien.
Una vez que tenga esto, inicie Solr y puede hacer consultas como " book_authors:Hemingway
" o " book_categories:Romance book_categories:Mills
".
Hay varios manejadores de consultas pre-escritos y configurados para que usted haga cosas como consultas complejas de parse (coincidencias difusas, operaciones booleanas, impulsos de puntuación, ...), y como la API de Solr está expuesta a través de HTTP, todo esto está envuelto por un número de las bibliotecas cliente, por lo que no es necesario que maneje los detalles de bajo nivel de la creación de consultas usted mismo.
Hay una gran cantidad de documentación excelente en su sitio web para que pueda comenzar.
Puede tener un campo para que un documento Lucene ocurra varias veces. Cree el documento, agregue los valores para el nombre y el autor, luego haga lo mismo para cada categoría
- crear nuevo documento lucene
- agregar campo de nombre y valor
- agregar campo de autor y valor
- para cada categoría:
- agregar campo de categoría y valor
- agregar documento al índice
Cuando busque una categoría en el índice, devolverá todos los documentos que tengan un campo de categoría con el valor que está buscando. La categoría debe ser un campo ''Palabra clave''.
Lo escribí en inglés porque el código específico es un poco diferente según la versión de lucene.