【发布时间】:2017-04-23 02:15:54
【问题描述】:
Lunr 在查找大多数结果方面做得很好,但我不明白为什么它不会返回 JSON 数组中包含的多字字符串。
这是一个示例 JSON 文件,可让您了解我的数据的结构:
[{
"title": "Rolling Loud",
"date": "May 5–7",
"location": "Miami, FL, USA",
"rock-artists": [],
"hh-artists": ["Kendrick Lamar", "Future"],
"electronic-artists": [],
"other-artists": []
}]
当我搜索“迈阿密”和“未来”时,lunr 返回节日。但是,当搜索“Kendrick”或“Kendrick Lamar”时,lunr 不会返回音乐节。
相关代码:
// initialize lunr
var idx = lunr(function () {
this.field('id');
this.field('title', { boost: 3 });
this.field('date');
this.field('location');
this.field('rockArtists', { boost: 3 });
this.field('hhArtists', { boost: 3 });
this.field('electronicArtists', { boost: 3 });
this.field('otherArtists', { boost: 3 });
// add festivals to lunr
for (var key in data) {
this.add({
'id': key,
'title': data[key].title,
'date': data[key].date,
'location': data[key].location,
'rockArtists': data[key]['rock-artists'],
'hhArtists': data[key]['hh-artists'],
'electronicArtists': data[key]['electronic-artists'],
'otherArtists': data[key]['other-artists']
});
}
});
谢谢!
【问题讨论】:
-
this在for..in循环中是什么? -
我不应该在函数内调用
add()吗?我在从循环外部调用idx.add时遇到问题,所以我将它放在函数内,而是通过this访问变量。 -
console.log(this)中的for..in记录了什么? -
它返回
Builder {}和很多孩子,包括_fields: ["id", "title", etc]和averageDocumentLength: 98.125。 -
没试过
lunrjs。您可以在 plnkr plnkr.co 重现问题吗?
标签: javascript json lunrjs