lucene-query-builder
Advanced tools
Comparing version 0.3.3 to 0.4.0
@@ -11,13 +11,18 @@ "use strict"; | ||
*/ | ||
const processTerms = (terms, bond) => terms | ||
.map((term) => { | ||
const entries = Object.entries(term); | ||
if (entries.length === 0) | ||
const processTerms = (terms, bond) => { | ||
if (!(terms === null || terms === void 0 ? void 0 : terms.length)) | ||
return ''; | ||
const [key, value] = entries[0]; | ||
const values = Array.isArray(value) ? value : [value]; | ||
return `(${values.map((val) => `${key}:${val}`).join(' OR ')})`; | ||
}) | ||
.filter(Boolean) | ||
.join(` ${bond} `); | ||
return (`${bond} ` + | ||
terms | ||
.map((term) => { | ||
const entries = Object.entries(term); | ||
if (entries.length === 0) | ||
return ''; | ||
const [key, value] = entries[0]; | ||
const values = Array.isArray(value) ? value : [value]; | ||
return `(${values.map((val) => `${key}:${val}`).join(' OR ')})`; | ||
}) | ||
.filter(Boolean) | ||
.join(` ${bond} `)); | ||
}; | ||
exports.processTerms = processTerms; |
import { query } from './query'; | ||
import { QueryBuilder } from './QueryBuilder'; | ||
export { query, QueryBuilder }; | ||
import { LuceneBuilder } from './LuceneBuilder'; | ||
import { fq } from './fq'; | ||
export { query, fq, LuceneBuilder }; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.QueryBuilder = exports.query = void 0; | ||
exports.LuceneBuilder = exports.fq = exports.query = void 0; | ||
const query_1 = require("./query"); | ||
Object.defineProperty(exports, "query", { enumerable: true, get: function () { return query_1.query; } }); | ||
const QueryBuilder_1 = require("./QueryBuilder"); | ||
Object.defineProperty(exports, "QueryBuilder", { enumerable: true, get: function () { return QueryBuilder_1.QueryBuilder; } }); | ||
const LuceneBuilder_1 = require("./LuceneBuilder"); | ||
Object.defineProperty(exports, "LuceneBuilder", { enumerable: true, get: function () { return LuceneBuilder_1.LuceneBuilder; } }); | ||
const fq_1 = require("./fq"); | ||
Object.defineProperty(exports, "fq", { enumerable: true, get: function () { return fq_1.fq; } }); |
@@ -13,2 +13,8 @@ /** | ||
} | ||
/** | ||
* Filter used in the query. The key is the field name. | ||
*/ | ||
export interface Filter { | ||
[key: string]: string | number | Array<string | number> | null; | ||
} | ||
export interface PhraseOptions { | ||
@@ -15,0 +21,0 @@ /** Number of letters in phrase to start fuzzy matching. */ |
@@ -8,12 +8,17 @@ /** | ||
*/ | ||
export const processTerms = (terms, bond) => terms | ||
.map((term) => { | ||
const entries = Object.entries(term); | ||
if (entries.length === 0) | ||
export const processTerms = (terms, bond) => { | ||
if (!(terms === null || terms === void 0 ? void 0 : terms.length)) | ||
return ''; | ||
const [key, value] = entries[0]; | ||
const values = Array.isArray(value) ? value : [value]; | ||
return `(${values.map((val) => `${key}:${val}`).join(' OR ')})`; | ||
}) | ||
.filter(Boolean) | ||
.join(` ${bond} `); | ||
return (`${bond} ` + | ||
terms | ||
.map((term) => { | ||
const entries = Object.entries(term); | ||
if (entries.length === 0) | ||
return ''; | ||
const [key, value] = entries[0]; | ||
const values = Array.isArray(value) ? value : [value]; | ||
return `(${values.map((val) => `${key}:${val}`).join(' OR ')})`; | ||
}) | ||
.filter(Boolean) | ||
.join(` ${bond} `)); | ||
}; |
import { query } from './query'; | ||
import { QueryBuilder } from './QueryBuilder'; | ||
export { query, QueryBuilder }; | ||
import { LuceneBuilder } from './LuceneBuilder'; | ||
import { fq } from './fq'; | ||
export { query, fq, LuceneBuilder }; |
import { query } from './query'; | ||
import { QueryBuilder } from './QueryBuilder'; | ||
export { query, QueryBuilder }; | ||
import { LuceneBuilder } from './LuceneBuilder'; | ||
import { fq } from './fq'; | ||
export { query, fq, LuceneBuilder }; |
@@ -13,2 +13,8 @@ /** | ||
} | ||
/** | ||
* Filter used in the query. The key is the field name. | ||
*/ | ||
export interface Filter { | ||
[key: string]: string | number | Array<string | number> | null; | ||
} | ||
export interface PhraseOptions { | ||
@@ -15,0 +21,0 @@ /** Number of letters in phrase to start fuzzy matching. */ |
{ | ||
"name": "lucene-query-builder", | ||
"version": "0.3.3", | ||
"version": "0.4.0", | ||
"description": "Library to build lucene queries in a typescript friendly way", | ||
@@ -16,3 +16,3 @@ "main": "lib/cjs/index.js", | ||
"compile": "npx tsc -p tsconfig.json && npx tsc -p tsconfig-cjs.json", | ||
"format": "prettier --write \"src/**/*.ts\"", | ||
"format": "prettier --write \"src/**/*.ts\" \"example/**/*.ts\"", | ||
"test": "echo \"Error: no test specified\" && exit 1", | ||
@@ -19,0 +19,0 @@ "prepublishOnly": "npm run compile" |
@@ -5,2 +5,4 @@ # Lucene Query Builder | ||
Tested with AWS CloudSearch. | ||
## Installation | ||
@@ -23,3 +25,3 @@ | ||
```typescript | ||
import { query } from 'lucene-query-builder' | ||
import { fq, query } from 'lucene-query-builder' | ||
@@ -29,3 +31,3 @@ const myQuery = query({ | ||
and: [{ fieldName: 'value1' }, { anotherField: ['value1', 'value2'] }], | ||
not: [{ fieldName: 'value2' }], | ||
not: [{ fieldName: 'value3' }], | ||
options: { | ||
@@ -38,3 +40,3 @@ fuzzyLetters: 5, | ||
console.log(myQuery) | ||
const myFilterQuery = fq([{ fieldName: 'value1' }, { anotherField: ['value1', 'value2'] }]) | ||
``` | ||
@@ -45,5 +47,5 @@ | ||
```typescript | ||
import { QueryBuilder } from 'lucene-query-builder' | ||
import { LuceneBuilder } from 'lucene-query-builder' | ||
const queryBuilder = new QueryBuilder({ | ||
const queryBuilder = new LuceneBuilder({ | ||
fuzzyLetters: 5, | ||
@@ -57,8 +59,41 @@ fuzzyLevel: 1, | ||
and: [{ fieldName: 'value1' }, { anotherField: ['value1', 'value2'] }], | ||
not: [{ fieldName: 'value2' }], | ||
not: [{ fieldName: 'value3' }], | ||
}) | ||
console.log(myQuery) | ||
const myFilterQuery = queryBuilder.fq([{ fieldName: 'value1' }, { anotherField: ['value1', 'value2'] }]) | ||
``` | ||
Basic usage with AWS CloudSearch | ||
```typescript | ||
import { CloudSearchDomainClient, SearchCommand } from '@aws-sdk/client-cloudsearch-domain' | ||
import { fq, query } from 'lucene-query-builder' | ||
const client = new CloudSearchDomainClient({ | ||
region: '<region>', | ||
endpoint: '<endpoint>', | ||
credentials: { | ||
accessKeyId: '<accessKeyId>', | ||
secretAccessKey: '<secretAccessKey>', | ||
}, | ||
}) | ||
const myQuery = query({ | ||
phrase: 'Hello world', | ||
and: [{ fieldName: 'value1' }, { anotherField: ['value1', 'value2'] }], | ||
not: [{ fieldName: 'value3' }], | ||
}) | ||
const myFilterQuery = fq([{ fieldName: 'value1' }, { anotherField: ['value1', 'value2'] }]) | ||
const command = new SearchCommand({ | ||
query: myQuery, | ||
queryParser: 'lucene', | ||
return: '_all_fields', | ||
filterQuery: myFilterQuery, | ||
}) | ||
const { hits, status } = await client.send(command) | ||
``` | ||
## Function Parameters and Options | ||
@@ -65,0 +100,0 @@ |
32874
39
676
111