Luqum: Lucene Query Parser

1.0.0 · active · verified Thu Apr 09

Luqum (LUcene QUery Manipolator) is a Python library that parses Lucene Query DSL strings, building an abstract syntax tree (AST) for inspection, analysis, and manipulation. It enables transforming Lucene DSL queries into native Elasticsearch JSON DSL. The library is currently at version 1.0.0 and sees releases as new features and maintenance updates are introduced, typically every few months. [1, 7, 11]

Warnings

Install

Imports

Quickstart

This quickstart demonstrates parsing a Lucene query string into an Abstract Syntax Tree (AST), resolving implicit operators, and converting the AST into an Elasticsearch Query DSL dictionary. It highlights core functionalities of `luqum` for query manipulation and transformation. [2, 3, 8]

from luqum.parser import parser
from luqum.elasticsearch import ElasticsearchQueryBuilder
from luqum.utils import UnknownOperationResolver

# 1. Parse a Lucene query string
query_string = '(title:"foo bar" AND body:"quick fox") OR title:fox'
tree = parser.parse(query_string)
print(f"Parsed AST: {repr(tree)}")
print(f"String representation: {str(tree)}\n")

# 2. Resolve unknown operations (e.g., implicit AND/OR)
# For a query like 'foo bar', it's parsed as UnknownOperation(Word('foo'), Word('bar'))
# Use a resolver to make it explicit, e.g., 'foo AND bar'
resolver = UnknownOperationResolver(default_operation=AndOperation) # AndOperation needs to be imported from luqum.tree
resolved_tree = resolver(parser.parse('foo bar'))
print(f"Resolved 'foo bar' to: {str(resolved_tree)}\n")

# 3. Transform to Elasticsearch Query DSL
# For complex schemas, pass nested_fields and object_fields arguments
es_builder = ElasticsearchQueryBuilder()
es_query = es_builder(tree)
print(f"Elasticsearch DSL:\n{es_query}")

view raw JSON →