Pregunta Campo que tiene múltiples valores distintos


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í.....

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?


24
2017-12-30 22:47


origen


Respuestas:


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.


32
2018-01-05 10:25



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")

5
2017-12-31 09:52



yo usaría Solr en su lugar, está construido en Lucene y gestionado por la 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 en los 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 multiValued='true' atributo le permite pasar una matriz o una 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 muchos estupendo  documentación en su sitio web para que comiences


4
2017-12-31 01:35