• Elasticsearch - The Definitive Guide:
  • Foreword
  • Preface
    • Who Should Read This Book
    • Why We Wrote This Book
    • Elasticsearch Version
    • How to Read This Book
    • Navigating This Book
    • Online Resources
    • Conventions Used in This Book
    • Using Code Examples
    • Acknowledgments
  • Getting Started
    • You Know, for Search…​
      • Installing Elasticsearch
      • Running Elasticsearch
      • Talking to Elasticsearch
      • Document Oriented
      • Finding Your Feet
      • Indexing Employee Documents
      • Retrieving a Document
      • Search Lite
      • Search with Query DSL
      • More-Complicated Searches
      • Full-Text Search
      • Phrase Search
      • Highlighting Our Searches
      • Analytics
      • Tutorial Conclusion
      • Distributed Nature
      • Next Steps
    • Life Inside a Cluster
      • An Empty Cluster
      • Cluster Health
      • Add an Index
      • Add Failover
      • Scale Horizontally
      • Coping with Failure
    • Data In, Data Out
      • What Is a Document?
      • Document Metadata
      • Indexing a Document
      • Retrieving a Document
      • Checking Whether a Document Exists
      • Updating a Whole Document
      • Creating a New Document
      • Deleting a Document
      • Dealing with Conflicts
      • Optimistic Concurrency Control
      • Partial Updates to Documents
      • Retrieving Multiple Documents
      • Cheaper in Bulk
    • Distributed Document Store
      • Routing a Document to a Shard
      • How Primary and Replica Shards Interact
      • Creating, Indexing, and Deleting a Document
      • Retrieving a Document
      • Partial Updates to a Document
      • Multidocument Patterns
    • Searching—​The Basic Tools
      • The Empty Search
      • Multi-index, Multitype
      • Pagination
      • Search Lite
    • Mapping and Analysis
      • Exact Values Versus Full Text
      • Inverted Index
      • Analysis and Analyzers
      • Mapping
      • Complex Core Field Types
    • Full-Body Search
      • Empty Search
      • Query DSL
      • Queries and Filters
      • Most Important Queries and Filters
      • Combining Queries with Filters
      • Validating Queries
    • Sorting and Relevance
      • Sorting
      • String Sorting and Multifields
      • What Is Relevance?
      • Fielddata
    • Distributed Search Execution
      • Query Phase
      • Fetch Phase
      • Search Options
      • scan and scroll
    • Index Management
      • Creating an Index
      • Deleting an Index
      • Index Settings
      • Configuring Analyzers
      • Custom Analyzers
      • Types and Mappings
      • The Root Object
      • Dynamic Mapping
      • Customizing Dynamic Mapping
      • Default Mapping
      • Reindexing Your Data
      • Index Aliases and Zero Downtime
    • Inside a Shard
      • Making Text Searchable
      • Dynamically Updatable Indices
      • Near Real-Time Search
      • Making Changes Persistent
      • Segment Merging
  • Search in Depth
    • Structured Search
      • Finding Exact Values
      • Combining Filters
      • Finding Multiple Exact Values
      • Ranges
      • Dealing with Null Values
      • All About Caching
      • Filter Order
    • Full-Text Search
      • Term-Based Versus Full-Text
      • The match Query
      • Multiword Queries
      • Combining Queries
      • How match Uses bool
      • Boosting Query Clauses
      • Controlling Analysis
      • Relevance Is Broken!
    • Multifield Search
      • Multiple Query Strings
      • Single Query String
      • Best Fields
      • Tuning Best Fields Queries
      • multi_match Query
      • Most Fields
      • Cross-fields Entity Search
      • Field-Centric Queries
      • Custom _all Fields
      • cross-fields Queries
      • Exact-Value Fields
    • Proximity Matching
      • Phrase Matching
      • Mixing It Up
      • Multivalue Fields
      • Closer Is Better
      • Proximity for Relevance
      • Improving Performance
      • Finding Associated Words
    • Partial Matching
      • Postcodes and Structured Data
      • prefix Query
      • wildcard and regexp Queries
      • Query-Time Search-as-You-Type
      • Index-Time Optimizations
      • Ngrams for Partial Matching
      • Index-Time Search-as-You-Type
      • Ngrams for Compound Words
    • Controlling Relevance
      • Theory Behind Relevance Scoring
      • Lucene’s Practical Scoring Function
      • Query-Time Boosting
      • Manipulating Relevance with Query Structure
      • Not Quite Not
      • Ignoring TF/IDF
      • function_score Query
      • Boosting by Popularity
      • Boosting Filtered Subsets
      • Random Scoring
      • The Closer, The Better
      • Understanding the price Clause
      • Scoring with Scripts
      • Pluggable Similarity Algorithms
      • Changing Similarities
      • Relevance Tuning Is the Last 10%
  • Dealing with Human Language
    • Getting Started with Languages
      • Using Language Analyzers
      • Configuring Language Analyzers
      • Pitfalls of Mixing Languages
      • One Language per Document
      • One Language per Field
      • Mixed-Language Fields
    • Identifying Words
      • standard Analyzer
      • standard Tokenizer
      • Installing the ICU Plug-in
      • icu_tokenizer
      • Tidying Up Input Text
    • Normalizing Tokens
      • In That Case
      • You Have an Accent
      • Living in a Unicode World
      • Unicode Case Folding
      • Unicode Character Folding
      • Sorting and Collations
    • Reducing Words to Their Root Form
      • Algorithmic Stemmers
      • Dictionary Stemmers
      • Hunspell Stemmer
      • Choosing a Stemmer
      • Controlling Stemming
      • Stemming in situ
    • Stopwords: Performance Versus Precision
      • Pros and Cons of Stopwords
      • Using Stopwords
      • Stopwords and Performance
      • Divide and Conquer
      • Stopwords and Phrase Queries
      • common_grams Token Filter
      • Stopwords and Relevance
    • Synonyms
      • Using Synonyms
      • Formatting Synonyms
      • Expand or contract
      • Synonyms and The Analysis Chain
      • Multiword Synonyms and Phrase Queries
      • Symbol Synonyms
    • Typoes and Mispelings
      • Fuzziness
      • Fuzzy Query
      • Fuzzy match Query
      • Scoring Fuzziness
      • Phonetic Matching
  • Aggregations
    • High-Level Concepts
      • Buckets
      • Metrics
      • Combining the Two
    • Aggregation Test-Drive
      • Adding a Metric to the Mix
      • Buckets Inside Buckets
      • One Final Modification
    • Building Bar Charts
    • Looking at Time
      • Returning Empty Buckets
      • Extended Example
      • The Sky’s the Limit
    • Scoping Aggregations
    • Filtering Queries and Aggregations
      • Filtered Query
      • Filter Bucket
      • Post Filter
      • Recap
    • Sorting Multivalue Buckets
      • Intrinsic Sorts
      • Sorting by a Metric
      • Sorting Based on "Deep" Metrics
    • Approximate Aggregations
      • Finding Distinct Counts
      • Calculating Percentiles
    • Significant Terms
      • significant_terms Demo
    • Controlling Memory Use and Latency
      • Fielddata
      • Aggregations and Analysis
      • Limiting Memory Usage
      • Fielddata Filtering
      • Doc Values
      • Preloading Fielddata
      • Preventing Combinatorial Explosions
    • Closing Thoughts
  • Geolocation
    • Geo Points
      • Lat/Lon Formats
      • Filtering by Geo Point
      • Geo Bounding Box Filter
      • Geo Distance Filter
      • Caching Geo Filters
      • Reducing Memory Usage
      • Sorting by Distance
    • Geohashes
      • Mapping Geohashes
      • Geohash Cell Filter
    • Geo Aggregations
      • Geo Distance Aggregation
      • Geohash Grid Aggregation
      • Geo Bounds Aggregation
    • Geo Shapes
      • Mapping Geo Shapes
      • Indexing Geo Shapes
      • Querying Geo Shapes
      • Querying with Indexed Shapes
      • Geo Shape Filters and Caching
  • Modeling Your Data
    • Handling Relationships
      • Application-side Joins
      • Denormalizing Your Data
      • Field Collapsing
      • Denormalization and Concurrency
      • Solving Concurrency Issues
    • Nested Objects
      • Nested Object Mapping
      • Querying a Nested Object
      • Sorting by Nested Fields
      • Nested Aggregations
    • Parent-Child Relationship
      • Parent-Child Mapping
      • Indexing Parents and Children
      • Finding Parents by Their Children
      • Finding Children by Their Parents
      • Children Aggregation
      • Grandparents and Grandchildren
      • Practical Considerations
    • Designing for Scale
      • The Unit of Scale
      • Shard Overallocation
      • Kagillion Shards
      • Capacity Planning
      • Replica Shards
      • Multiple Indices
      • Time-Based Data
      • Index Templates
      • Retiring Data
      • User-Based Data
      • Shared Index
      • Faking Index per User with Aliases
      • One Big User
      • Scale Is Not Infinite
  • Administration, Monitoring, and Deployment
    • Monitoring
      • Marvel for Monitoring
      • Cluster Health
      • Monitoring Individual Nodes
      • Cluster Stats
      • Index Stats
      • Pending Tasks
      • cat API
    • Production Deployment
      • Hardware
      • Java Virtual Machine
      • Transport Client Versus Node Client
      • Configuration Management
      • Important Configuration Changes
      • Don’t Touch These Settings!
      • Heap: Sizing and Swapping
      • File Descriptors and MMap
      • Revisit This List Before Production
    • Post-Deployment
      • Changing Settings Dynamically
      • Logging
      • Indexing Performance Tips
      • Rolling Restarts
      • Backing Up Your Cluster
      • Restoring from a Snapshot
      • Clusters Are Living, Breathing Creatures