1
0
mirror of https://github.com/nextapps-de/flexsearch.git synced 2025-09-09 13:41:13 +02:00
This commit is contained in:
Thomas Wilkerling
2019-02-05 18:17:29 +01:00
parent 98fa8ba800
commit c00e62b221
12 changed files with 1243 additions and 228 deletions

353
test/test.es6.js Normal file
View File

@@ -0,0 +1,353 @@
if(typeof module !== "undefined"){
var expect = require("chai").expect;
}
module.exports = function(FlexSearch, env){
// ------------------------------------------------------------------------
// Multi-Field Documents
// ------------------------------------------------------------------------
if(env === "") describe("Index Multi-Field Documents", function(){
var data = [{
data:{
id: 0,
title: "Title 1",
body: "Body 1"
}
},{
data:{
id: 1,
title: "Title 2",
body: "Body 2"
}
},{
data:{
id: 2,
title: "Title 3",
body: "Body 3"
}
}];
var update = [{
data:{
id: 0,
title: "Foo 1",
body: "Bar 1"
}
},{
data:{
id: 1,
title: "Foo 2",
body: "Bar 2"
}
},{
data:{
id: 2,
title: "Foo 3",
body: "Bar 3"
}
}];
it("Should have been indexed properly", function(){
var index = new FlexSearch({
doc: {
id: "data:id",
field: [
"data:title",
"data:body"
]
}
});
index.add(data);
expect(index.doc.index[0].length).to.equal(3);
expect(index.doc.index[1].length).to.equal(3);
expect(index.search({field: "data:body", query: "body"})).to.have.members(data);
expect(index.search({field: "data:title", query: "title"})).to.have.members(data);
expect(index.search({field: "data:body", query: "title"})).to.have.lengthOf(0);
expect(index.search({field: "data:title", query: "body"})).to.have.lengthOf(0);
expect(index.search({field: ["data:title", "data:body"], query: "body"})).to.have.members(data);
expect(index.search({field: ["data:body", "data:title"], query: "title"})).to.have.members(data);
expect(index.search({query: "body"})).to.have.members(data);
expect(index.search("title")).to.have.members(data);
expect(index.search({
field: "data:title",
query: "title",
boost: 2
})).to.have.members(data);
expect(index.search([{
field: "data:title",
query: "body",
boost: 2
},{
field: "data:body",
query: "body",
boost: 2
}])).to.have.members(data);
expect(index.search("title", {
field: "data:title",
boost: 2
})).to.have.members(data);
expect(index.search("title", {
field: "data:body",
boost: 2
})).to.have.lengthOf(0);
expect(index.search("body", [{
field: "data:title",
boost: 2
},{
field: "data:body",
boost: 2
}])).to.have.members(data);
index.update(update);
expect(index.search("foo")).not.to.have.members(data);
expect(index.search("bar")).not.to.have.members(data);
expect(index.search("foo")).to.have.members(update);
expect(index.search("bar")).to.have.members(update);
index.remove(update);
expect(index.doc.index[0].length).to.equal(0);
expect(index.doc.index[1].length).to.equal(0);
});
it("Should have been boosted properly", function(){
var index = new FlexSearch({
tokenize: "strict",
depth: 3,
doc: {
id: "id",
field: ["title", "body"]
}
});
index.add([{
id: 0,
title: "1 2 3 4 5",
body: "1 2 3 4 5"
},{
id: 1,
title: "1 2 3 4 5",
body: "1 2 5 4 3" // <-- body
},{
id: 2,
title: "1 2 5 4 3", // <-- title
body: "1 2 3 4 5"
}]);
expect(index.search([{
field: "title",
query: "5",
boost: 0.1
},{
field: "body",
query: "5",
boost: 9
}])[0].id).to.equal(1);
expect(index.search([{
field: "title",
query: "5",
boost: 9
},{
field: "body",
query: "5",
boost: 0.1
}])[0].id).to.equal(2);
});
it("Should have been indexed properly (Async)", async function(){
var index = new FlexSearch({
async: true,
doc: {
id: "data:id",
field: [
"data:title",
"data:body"
]
}
});
await index.add(data);
expect(index.doc.index[0].length).to.equal(3);
expect(index.doc.index[1].length).to.equal(3);
expect(await index.search({field: "data:body", query: "body"})).to.have.members(data);
expect(await index.search({field: "data:title", query: "title"})).to.have.members(data);
expect(await index.search({field: "data:body", query: "title"})).to.have.lengthOf(0);
expect(await index.search({field: "data:title", query: "body"})).to.have.lengthOf(0);
expect(await index.search({field: ["data:title", "data:body"], query: "body"})).to.have.members(data);
expect(await index.search({field: ["data:body", "data:title"], query: "title"})).to.have.members(data);
expect(await index.search({query: "body"})).to.have.members(data);
expect(await index.search("title")).to.have.members(data);
await index.update(update);
expect(await index.search("foo")).not.to.have.members(data);
expect(await index.search("bar")).not.to.have.members(data);
expect(await index.search("foo")).to.have.members(update);
expect(await index.search("bar")).to.have.members(update);
await index.remove(update);
expect(await index.doc.index[0].length).to.equal(0);
expect(await index.doc.index[1].length).to.equal(0);
});
it("Should have been indexed properly (Worker)", async function(){
var index = new FlexSearch({
worker: 4,
async: true,
doc: {
id: "data:id",
field: [
"data:title",
"data:body"
]
}
});
await index.add(data);
expect(index.doc.index[0].length).to.equal(3);
expect(index.doc.index[1].length).to.equal(3);
expect(await index.search({field: "data:body", query: "body"})).to.have.members(data);
expect(await index.search({field: "data:title", query: "title"})).to.have.members(data);
expect(await index.search({field: "data:body", query: "title"})).to.have.lengthOf(0);
expect(await index.search({field: "data:title", query: "body"})).to.have.lengthOf(0);
expect(await index.search({field: ["data:title", "data:body"], query: "body"})).to.have.members(data);
expect(await index.search({field: ["data:body", "data:title"], query: "title"})).to.have.members(data);
expect(await index.search({query: "body"})).to.have.members(data);
expect(await index.search("title")).to.have.members(data);
await index.update(update);
expect(await index.search("foo")).not.to.have.members(data);
expect(await index.search("bar")).not.to.have.members(data);
expect(await index.search("foo")).to.have.members(update);
expect(await index.search("bar")).to.have.members(update);
await index.remove(update);
expect(await index.doc.index[0].length).to.equal(0);
expect(await index.doc.index[1].length).to.equal(0);
});
});
// ------------------------------------------------------------------------
// Export / Import
// ------------------------------------------------------------------------
if(env !== "light") describe("Export / Import", function(){
var data;
it("Should have been exported properly", function(){
var index = new FlexSearch({
tokenize: "reverse",
doc: {
id: "id",
field: "title"
}
});
index.add({id: 0, title: "foo"});
index.add({id: 1, title: "bar"});
index.add({id: 2, title: "foobar"});
if(env === ""){
expect(index.doc.index[0].length).to.equal(3);
data = index.export();
expect(data).to.equal(JSON.stringify([
[
index.doc.index[0]._map,
index.doc.index[0]._ctx,
index.doc.index[0]._ids
],
index._doc
]));
}
else{
data = index.export();
}
});
it("Should have been imported properly", function(){
var index = new FlexSearch("score", {
doc: {
id: "id",
field: "title"
}
});
index.import(data);
if(env === ""){
expect(index.doc.index[0].length).to.equal(3);
}
expect(index.search("foo")).to.have.lengthOf(2);
expect(index.search("bar")).to.have.lengthOf(2);
expect(index.search("foobar")).to.have.lengthOf(1);
expect(index.search("foobar")[0].id).to.equal(2);
});
});
};

View File

@@ -1077,32 +1077,104 @@ describe("Relevance", function(){
// Suggestion Tests
// ------------------------------------------------------------------------
if(env !== "light"){
if(env !== "light") describe("Suggestion", function(){
describe("Suggestion", function(){
it("Should have been suggested properly by relevance", function(){
it("Should have been suggested properly by relevance", function(){
var index = new FlexSearch({
encode: "advanced",
tokenize: "strict",
suggest: true
});
index.add(0, "1 2 3 2 4 1 5 3");
index.add(1, "zero one two three four five six seven eight nine ten");
index.add(2, "four two zero one three ten five seven eight six nine");
expect(index.search("1 3 4 7")).to.have.members([0]);
expect(index.search("1 3 9 7")).to.have.members([0]);
expect(index.search("one foobar two")).to.have.members([1, 2]);
expect(index.search("zero one foobar two foobar")).to.have.members([1, 2]);
//TODO
//expect(index.search("zero one foobar two foobar")[0]).to.equal(1);
var index = new FlexSearch({
encode: "advanced",
tokenize: "strict",
suggest: true
});
index.add(0, "1 2 3 2 4 1 5 3");
index.add(1, "zero one two three four five six seven eight nine ten");
index.add(2, "four two zero one three ten five seven eight six nine");
expect(index.search("1 3 4 7")).to.have.members([0]);
expect(index.search("1 3 9 7")).to.have.members([0]);
expect(index.search("one foobar two")).to.have.members([1, 2]);
expect(index.search("zero one foobar two foobar")).to.have.members([1, 2]);
//TODO
//expect(index.search("zero one foobar two foobar")[0]).to.equal(1);
});
});
// ------------------------------------------------------------------------
// Multi-Field Documents
// ------------------------------------------------------------------------
if(!this._phantom){
require("./test.es6.js")(FlexSearch, env);
}
// ------------------------------------------------------------------------
// Export / Import
// ------------------------------------------------------------------------
if(env !== "light") describe("Export / Import", function(){
var data;
it("Should have been exported properly", function(){
var index = new FlexSearch({
tokenize: "reverse",
doc: {
id: "id",
field: "title"
}
});
index.add({id: 0, title: "foo"});
index.add({id: 1, title: "bar"});
index.add({id: 2, title: "foobar"});
if(env === ""){
expect(index.doc.index[0].length).to.equal(3);
data = index.export();
expect(data).to.equal(JSON.stringify([
[
index.doc.index[0]._map,
index.doc.index[0]._ctx,
index.doc.index[0]._ids
],
index._doc
]));
}
else{
data = index.export();
}
});
it("Should have been imported properly", function(){
var index = new FlexSearch("score", {
doc: {
id: "id",
field: "title"
}
});
index.import(data);
if(env === ""){
expect(index.doc.index[0].length).to.equal(3);
}
expect(index.search("foo")).to.have.lengthOf(2);
expect(index.search("bar")).to.have.lengthOf(2);
expect(index.search("foobar")).to.have.lengthOf(1);
expect(index.search("foobar")[0].id).to.equal(2);
});
});
// ------------------------------------------------------------------------
// Feature Tests
// ------------------------------------------------------------------------