Red de conocimiento informático - Aprendizaje de programación - Directorio de combate real de Lucene

Directorio de combate real de Lucene

Contenido

Parte 1 Lucene Core

Capítulo 1 Conociendo Lucene 3

1.1 Cómo afrontar la explosión de información 4

1.2 Qué es Lucene5

1.2.1 Qué puede hacer Lucene6

1.2.2 La historia de Lucene7

1.3 Lucene y los programas de búsqueda Componente 9

1.3.1 Componente índice 10

1.3.2 Componente búsqueda 13

1.3.3 Otros módulos del programa de búsqueda 16

1.3.4 Puntos de integración entre Lucene y las aplicaciones 18

1.4 Lucene en acción: ejemplos de programas 18

1.4.1 Indexación 19

1.4.2 Índice de búsqueda 22

1.5 Clases básicas para comprender el proceso de indexación 25

1.5.1 IndexWriter 25

1.5.2 Directorio 25

1.5. 3 Analizador 26

1.5.4 Documento 26

1.5.5 Campo 27

1.6 Clases principales para comprender el proceso de búsqueda 27

1.6 .1 IndexSearcher 27

1.6.2 Término 28

1.6.3 Consulta 28

1.6.4 TermQuery 28

1.6. 5 TopDocs 29

1.7 Resumen 29

Capítulo 2 Índice de construcción 30

2.1 Cómo los modelos Lucene buscan contenido 31

2.1 .1 Documentos y dominios 31

2.1.2 Arquitectura flexible 32

2.1.3 Desnormalización 32

2.2 Comprender el proceso de indexación 33

2.2. 1 Extraer texto y crear documentos 33

2.2.2 Analizar documentos 34

2.2.3 Agregar documentos al índice 34

2.3 Operaciones básicas de índice 35

2.3.1 Agregar documentos al índice 35

2.3.2 Eliminar documentos en el índice 38

2.3.3 Actualizar la documentación del índice 39

2.4 Opciones de dominio 41

2.4.1 Opciones de indexación de dominio 41

2.4.2 Opciones de almacenamiento de dominio 42

2.4 .3 Opciones de vector de elementos de dominio 42

2.4.4 Valores de dominio Reader, TokenStream y byte[ ] 42

2.4.5 Combinaciones de opciones de dominio 43

2.4 .6Opciones de clasificación de campos 44

2.4.7 Campos multivalor 44

2.5 Operaciones de ponderación de documentos y campos 45

2.5.1 Operaciones de ponderación de documentos 45

2.5 .2 Operación de ponderación del dominio 46

2.5.3 Base de ponderación (Normas) 47

2.6 Número de índice, fecha y hora 48

2.6.1 Número de índice 48

2.6.2 Fecha y hora del índice 49

2.7 Truncamiento de campos 50

2.8 Búsqueda casi en tiempo real (Búsqueda casi en tiempo real) 51

2.9 Optimización del índice 51

2.10 Otras subclases de directorio 52

2.11 Concurrencia, seguridad de subprocesos y mecanismo de bloqueo 55

2.11.1 Seguridad de subprocesos y seguridad de máquinas multivirtuales 55

2.11.2 Acceso a índices a través de sistemas de archivos remotos 56

2.11.3 Mecanismo de bloqueo de índices 57

2.12 Depuración de índices 59

2.13 Conceptos avanzados de indexación 60

2.13.1 Utilice IndexReader para eliminar documentos 61

2.13.2 Recuperar el espacio en disco utilizado por los documentos eliminados 62

2.13.3 Almacenamiento en búfer y actualización 62

2.13.4 Confirmación de índice 63

2.13.5 Transacciones ACID y continuidad del índice 65

2.13.6 Fusión de segmentos 66

2.14 Resumen 68

Capítulo 3 Agregar funciones de búsqueda a aplicaciones 70

3.1 Implementar funciones de búsqueda simples 71

3.1.1 Buscar elementos específicos 72

3.1.2 Analizar la expresión de consulta ingresada por el usuario: QueryParser 73

3.2 Usar la clase IndexSearcher 76

3.2.1 Crear la clase IndexSearcher 76

3.2.2 Implementar la función de búsqueda 78

3.2.3 Usar la clase TopDocs 78

3.2.4 Paginar resultados de búsqueda 79

3.2.5 Recientes en tiempo real búsqueda 79

3.3 Comprender el mecanismo de puntuación de Lucene 81

3.3.1 Cómo puntúa Lucene 81

3.3.2 Usar explica() para comprender la puntuación de los resultados de búsqueda 83

3.4 Consulta diversa de Lucene 84

3.4.1 Búsqueda por elemento: clase TermQuery 85

3.4.2 Búsqueda dentro del rango de elementos especificado: clase TermRangeQuery 86

3.4.3 Búsqueda dentro de un rango específico de números: NumericRangeQuery clase 87

3.4.4 Búsqueda por cadena: PrefixQuery clase 88

3.4 .5 Consulta combinada: BooleanQuery clase 88

3.4.6 Búsqueda por frase: PhraseQuery clase 91

3.4.7 Consulta comodín: WildcardQuery clase 93

3.4. : Clase FuzzyQuery 94

3.4.9 Coincidir con todos los documentos: clase MatchAllDocsQuery 95

3.5 Analizar expresión de consulta: QueryParser 96

3.5.1 Método Query.toString 97

3.5.2 TermQuery 97

3.5.3 Consulta por rango de elementos 98

3.5.4 Búsqueda por rango numérico y búsqueda por rango de fechas 99

3.5.5 Consulta de prefijo y consulta con comodín 99

3.5.6 Operador booleano 100

3.5.7 Consulta de frase 100

3.5 .8 Consulta difusa 101

3.5.9 MatchAllDocsQuery 102

3.5.10 Consulta de grupo 102

3.5.11 Selección de dominio 103

3.5.12 Establecer peso 103 para subconsulta

3.5.13 ¿Tienes que usar QueryParse 103?

3.6 Resumen 104

Capítulo 4 Proceso de análisis de Lucene 105

4.1 Usando el analizador 106

p>

4.1.1 Análisis durante el proceso de indexación 107

4.1.2 Análisis de QueryParser 109

4.1.3 Análisis vs análisis: ¿Cuándo deja de aplicarse el analizador 109

4.2 Analizador de análisis 110

4.2.1 Composición de la unidad de vocabulario 111

4.2.2 Revelando el secreto del flujo de la unidad de vocabulario 112

4.2 .3 Observando el analizador 115

4.2.4 Filtro de tokens: la importancia del orden de los filtros 119

4.3 Usando el analizador incorporado 121

4.3. 1 StopAnalyzer 122

4.3.2 StandardAnalyzer 122

4.3.3 Qué analizador central se debe utilizar 123

4.4 Consulta de palabras cercanas 123

4.5 Sinónimos, alias y otras palabras que expresan el mismo significado 126

4.5.1 Crear un SynonymAnalyzer 127

4.5.2 Mostrar la posición de una unidad de vocabulario 131

4.6 Derivación 132

4.6.1 StopFilter retiene espacios 133

4.6.2 Fusionar operaciones de derivación y operaciones de eliminación de palabras vacías 134

4.7 Análisis de dominio 134

4.7.1 Análisis de dominio multivalor 135

4.7.2 Análisis de dominio específico 135

4.7.3 Búsqueda de dominios no analizados 136

4.8 Análisis del idioma 139

4.8.1 Unicode y codificación de caracteres 139

4.8.2 Análisis del idioma distinto del inglés 140

4.8.3 Estandarización de caracteres procesamiento 140

4.8.4 Análisis de idiomas asiáticos 141

4.8.5 Otras cuestiones relacionadas con el análisis de idiomas distintos del inglés 143

4.9 Análisis de Nutch 144

4.10 Resumen 146

Capítulo 5 Tecnología de búsqueda avanzada 147

5.1 Almacenamiento en caché de dominios de Lucene 148

5.1.1 Carga de valores de dominio para todos los documentos 149

5.1.2 El lector correspondiente al segmento 149

5.2 Ordenar los resultados de búsqueda 150

5.2.1 Ordenar según el valor del dominio 150

5.2.2 Ordenar por relevancia153

5.2.3 Ordenar por orden de índice154

5.2.4 Ordenar por dominio154

5.2 .5 Ordenar en reversa 155

5.2.6 Ordenar por múltiples campos 156

5.2.7 Seleccionar el tipo para el campo de ordenación 157

5.2.8 Usar no clasificación de forma predeterminada método local 157

5.3 Uso de MultiPhraseQuery 158

5.4 Consulta única para múltiples dominios 160

5.5 Consulta de extensión 162

5.5. 1 Componentes básicos de la consulta de intervalo: SpanTermQuery 165

5.5.2 Encuentre el intervalo 166 en el punto inicial del dominio

5.5.3 Span 167 adyacentes entre sí

5.5.4 En Partido

Excluir intervalos superpuestos de resultados coincidentes 169

5.5.5 Clase SpanOrQuery 170

5.5.6 Clase SpanQuery y clase QueryParser 171

5.6 Filtrado de búsqueda 172

p>

5.6.1 TermRangeFilter 173

5.6.2 NumericRangeFilter 174

5.6.3 FieldCacheRangeFilter 174

5.6.4 Filtrado de elementos específicos 174

p>

5.6.5 Usando la clase QueryWrapperFilter 175

5.6.6 Usando la clase SpanQueryFilter 175

5.6.7 Filtro de seguridad 176

5.6.8 Usar la clase BooleanQuery para filtrar 177

5.6.9 PrefixFilter 178

5.6.10 Almacenamiento en caché de los resultados del filtro 178

5.6.11 Encapsular el filtro en una consulta 179

5.6.12 Filtrar filtros 179

5.6.13 Filtros integrados que no son de Lucene 180

5.7 Usar consultas funcionales para implementar puntuación personalizada 180

5.7.1 Clases relacionadas para consultas funcionales 180

5.7.2 Uso de consultas funcionales para ponderar documentos modificados recientemente 182

5.8 Búsqueda en múltiples índices 184

5.8.1 Usando la clase MultiSearch 184

5.8.2 Usando ParallelMultiSearcher para búsqueda multiproceso 186

5.9 Usando vectores de elementos 186

5.9 .1Encontrar libros similares187

5.9.2 A qué categoría pertenece190

5.9.3 Clase TermVectorMapper193

5.10 Cargando campos usando FieldSelector194

5.11 Detener búsquedas lentas 195

5.12 ​​​​Resumen 196

Capítulo 6 Búsqueda extendida 198

6.1 Usar métodos de clasificación personalizados 199

p>

6.1.1 Indexación de documentos basada en la clasificación por ubicación geográfica 199

6.1.2 Implementación de clasificación por ubicación geográfica personalizada 200

6.1.3 Acceso a clasificación personalizada El valor en 203

6.2 Desarrollar un recopilador personalizado 204

6.2.1 Clase base del recopilador 205

6.2.2 Recopilador personalizado: BookLinkCollector 206

p>

6.2.3 Clase AllDocCollector 207

6.3 Ampliar la clase QueryParser 208

6.3.1 Personalizar el comportamiento de QueryParser 208

6.3.2 Deshabilitar consultas difusas y consultas con comodines 209

6.3.3 Procesamiento de consultas de rango de campos numéricos 210

6.3.4 Procesamiento de rangos de fechas 211

6.3.5 Consulta por pares ordenados con frase 213

6.4 Filtros personalizados 215

6.4.1 Implementar filtros personalizados 215

6.4.2 Usar filtros personalizados durante la búsqueda 216

6.4.3 Otro

Una opción: clase FilterQuery 217

6.5 Cargas útiles 218

6.5.1 Generar carga útil durante el análisis 219

6.5.2 Usar durante la búsqueda Carga útil 220

6.5.3 Consulta de carga útil y extensión 223

6.5.4 Recuperación de carga útil a través de TermPositions 223

6.6 Resumen 223

Parte 2 Aplicación Lucene

Capítulo 7 Uso de Tika para extraer texto 227

7.1 ¿Qué es Tika 228?

7.2 Diseño lógico y API de Tika 230

7.3 Instalación de Tika 231

7.4 Herramienta de extracción de texto incorporada de Tika 232

7.5 Programación de extracción de texto 234

7.5.1 Índice de documentación de Lucene 234

7.5. 2 Clase de herramienta Tika 237

7.5.3 Elegir un analizador personalizado 238

7.6 Limitaciones de Tika 238

7.7 Indexación de archivos XML personalizados 239

7.7.1 Usar SAX para analizar 239

7.7.2 Usar Apache Commons Digester para analizar e indexar 242

7.8 Otras opciones 244

7.9 Resumen 245

Capítulo 8 Extensiones básicas de Lucene 246

8.1 Luke: Caja de herramientas de índice de Lucene 247

8.1.1 Pestaña Descripción general: Vista global del índice 248

8.1.2 Explorar documentos 249

8.1.3 Buscar utilizando QueryParser 251

8.1 .4 Pestaña Archivos y complementos 252

8.2 Analizadores, tokenizadores y filtros de token 253

8.2.1 SnowballAnalyzer 255

8.2.2 Filtro Ngram 256

8.2.3 Filtro Shingle 258

8.2. 4 Obtener analizador de donaciones 258

8.3 Resaltar elementos de consulta 259

8.3.1 Módulo de resaltado 259

8.3.2 Ejemplo de resaltado independiente 262

8.3.3 Usar CSS para resaltar el procesamiento 263

8.3.4 Resaltar resultados de búsqueda 264

8.4 Clase FastVector Highlighter 266

8.5 Revisión ortográfica 269

8.5.1 Generar lista de mensajes 269

8.5.2 Elegir los mejores consejos 271

8.5.3 Presentar resultados de búsqueda a los usuarios 272

8.5 .4 Algunas consideraciones para fortalecer la revisión ortográfica 273

8.5.2 p>

8.6 Expansión de consultas convincentes 274

8.6.1 Más como esto 274

8.6. 2 FuzzyLikeThisQuery 275

8.6.3 BoostingQuery 275

8.6.4 TermsFilter 276

8.6.5 DuplicateFilter 276

8.6.6 RegexQuery

276

8.7 Creación del módulo de donación de software (módulo contrib) 277

8.7.1 Método de adquisición del código fuente 277

8.7.2 Complemento Ant en el directorio contrib 277

8.8 Resumen 278

Capítulo 9 Extensiones avanzadas de Lucene 279

9.1 Filtro de cadena 280

9.2 Uso del índice de almacenamiento Berkeley DB 282

9.3 Sinónimos de WordNet 284

9.3.1 Crear un índice de sinónimos 285

9.3.2 Vincular sinónimos de WordNet al analizador 287

9.4 Indexación rápida basada en memoria 289

9.5 XML QueryParser: una interfaz de búsqueda más allá de "una sola caja" 289

9.5.1 Usando XmlQueryParser 291

9.5. Sintaxis de consulta XML extendida 295

9.6 Lenguaje de consulta periférico 296

9.7 Lucene espacial 298

9.7.1 Índice de datos espaciales 299

. 9.7.2 Buscar datos espaciales 302

9.7.3 Características de rendimiento de Spatial Lucene 304

9.8 Búsqueda remota de múltiples índices 306

9.9 Flexible QueryParser 309

p>

9.10 Otro contenido 312

9.11 Resumen 313

Capítulo 10 Uso de Lucene en otros lenguajes de programación 314

10.1 Introducción al trasplante 315

10.1.1 Compensaciones de portabilidad 316

10.1.2 Elección de la versión de portabilidad adecuada 317

10.2 CLucene(C) 317

10.2.1 Propósito de la portabilidad318

10.2.2 Compatibilidad de índices y API319

10.2.3 Plataformas compatibles321

10.2.4 Situación actual y perspectivas futuras321

10.3 Lucene-Net (C# y otros lenguajes de programación .NET) 321

10.3.1 API compatible con 323

10.3.2 Índice compatible con 324

10.4 KinoSearch y Lucy (Perl) 324

10.4.1 KinoSearch 325

10.4.2 Lucy 327

10.4.3 Otras opciones de Perl 327

10.5 Ferret(Ruby) 328

10.6 PHP 329

10.6.1 Zend Framework 329

10.6.2 PHP Bridge 330

10.7 PyLucene(Python) 330

10.7.1 Compatible con API 332

10.7.2 Otras opciones de Python 332

10.8 Solr (incluida una variedad del lenguaje de programación) 332

10.9 Resumen 334

Capítulo 11 Gestión de Lucene y ajuste del rendimiento 335

11.1 Ajuste del rendimiento 336

11.1. 1 Pasos sencillos para ajustar el rendimiento 337

11.1.2 Método de prueba 338

11

.1.3 Ajuste de latencia de búsqueda de índice 339

11.1.4 Ajuste de rendimiento de operación de índice 340

11.1.5 Latencia de búsqueda y ajuste de rendimiento de búsqueda 344

11.2 Multi- subprocesos y procesamiento paralelo 346

11.2.1 Uso de subprocesos múltiples para operaciones de indexación 347

11.2.2 Uso de subprocesos múltiples para operaciones de búsqueda 351

11.3 Recurso gestión de consumo 354

11.3.1 Gestión de espacio en disco 354

11.3.2 Gestión de descriptores de archivos 357

11.3.3 Gestión de memoria 361

11.4 Copia de seguridad en caliente del índice 364

11.4.1 Creación de una copia de seguridad del índice 365

11.4.2 Restauración del índice 366

11.5 Errores comunes 367

11.5.1 Índice de daños 367

11.5.2 Índice de reparación 369

11.6 Resumen 369

Parte 3 Análisis de caso

Capítulo 12 Estudio de caso 1: Krugle 373

12.1 Introducción a Krugle 374

12.2 Arquitectura de aplicaciones 375

12.3 Rendimiento de búsqueda 376

12.4 Código fuente análisis 377

12.5 Búsqueda de subcadenas 378

12.6 Consulta VS búsqueda 381

12.7 Margen de mejora 382

12.7.1 Uso de memoria FieldCache 382

12.7.2 Índice de fusión 382

12.8 Resumen 383

Capítulo 13 Análisis de caso 2: SIREn 384

13.1 Introducción a SIREn 385

13.2 Ventajas de SIREn 385

13.2.1 Búsqueda en todos los dominios 387

13.2.2 Un diccionario eficaz 388

13.2 .3 Campos variables 388

13.2.4 Procesamiento eficiente de campos multivalor 388

13.3 Uso de SIREn para indexar entidades 388

13.3.1 Modelo de datos 389

13.3.2 Problemas de implementación 389

13.3.3 Resumen del índice 390

13.3.4 Preparación de datos antes de la indexación 390

13.4 Uso SIREn para buscar entidades 392

13.4.1 Buscar contenido 392

13.4.2 Limitar el alcance de la búsqueda en función de las unidades 393

13.4. unidades en tuplas 393

13.4.4 Consultar descripciones de entidades 394

13.5 Integrar SIREn en Solr 394

13.6 Benchmark 395

p>

13.7 Resumen 397

Capítulo 14 Análisis de caso 3: LinkedIn 398

14.1 Usar Bobo Browse para búsqueda grupal 398

14.1.1 Diseño de Bobo Browse 400

14.1.2 Búsqueda grupal profunda 403

14.2 Uso de Zoie para búsqueda en tiempo real 405

14.2.1 Arquitectura Zoie 406

14.2.2 Tiempo real VS casi tiempo real 409

14.2.3 Solicitud de índice y documento 411

14.2.4 Ind. personalizada

exReaders 411

14.2.5 Comparación con la búsqueda casi en tiempo real de Lucene 412

14.2.6 Búsqueda distribuida 413

14.3 Resumen 415

Apéndice A Instalar Lucene 416

A.1 Instalación de archivos binarios 416

A.2 Ejecutar el programa de demostración de línea de comandos 417

A.3 Ejecutar la web aplicación Programa de demostración 418

A.4 Compilación del código fuente 419

A.5 Solución de problemas 420

Apéndice B Formato de índice de Lucene 421

B.1 Vista de índice lógico 421

B.2 Acerca de la estructura del índice 422

B.2.1 Comprensión de la estructura de índice de múltiples archivos 422

B.2.2 Comprensión del compuesto Estructura del índice 425

B.2.3 Estructura del índice de conversión 426

B.3 Índice invertido 427

B.4 Resumen 430

Apéndice C Lucene/contrib benchmark 431

C.1 Ejecución del script de prueba 432

C.2 Componentes del script de prueba 435

C.2.1 Fuentes de contenido y Generador de documentación 438

C.2.2 Generador de consultas 439

C.3 Estructura de control 439

C.4 Tarea incorporada 441

C.4.1 Crear y usar archivos de líneas 445

C.4.2 Tareas de informes integradas 446

C.5 Evaluación de la calidad de la búsqueda 446

C.6 Manejo de errores 449

C.7 Resumen 449

Apéndice D Recursos 450

D.1 Base de conocimientos de Lucene 450

D.2 Internacionalización 450

D.3 Detección de idioma 451

D.4 Vector de elementos 451

D.5 Versión adaptada de Lucene 451

D .6 Análisis de casos 452

D.7 Otros 452

D.8 Software de recuperación de información 452

D.9 Obras de Doug Cutting 453

D.9.1 Documento de conferencia 453

D.9.2 Patente de EE. UU. 454