我在cloudant中有一个Json文档:
{
"_id": "3-f812228f45b5f4e4962505561953ew245",
"_rev": "3-f812228f45b5f4e496250556195372b2",
"wiki_page": "http://en.wikipedia.org/wiki/African_lion",
"name": "african lion",
"class": "mammal",
"diet": "herbivore"
}
我想创建一个搜索索引,当我输入查询时,可以搜索此文档,并且#34; afrian lion"或者"狮子非洲",...
我创建了一个函数,可以返回" doc.name"中的所有排列情况。用于索引(此函数运行良好,并且在纯JS环境中也已检查过)。但是,它在cloudant中不起作用,当我输入查询时输出返回 null 。
这是我在搜索索引中创建的代码:
function(doc){
var list = [];
function permute(ss, used, res, level, list){
if(level==ss.length&&res!==""){
list.push(res);
return;
}
for(var i=0; i<ss.length; i++){
console.log("loops");
if (used[i]===true){
continue;
}
if(level>=0){
if (res!="" && list.indexOf(res)<0){
list.push(res.trim());
}
used[i]=true;
permute(ss, used, res+" "+ss[i], level+1, list)
used[i]=false;
}
}
}
function permuteword(s){
var ss=s.split(" ");
var used = [];
var res = "";
list = [];
permute(ss, used, res, 0, list);
console.log(list);
}
var contentIndex=[];
contentIndex=permuteword("african lion");
for(var i=0; i<contentIndex.length; i++){
index("default", contentIndex[i]);
}
}
我该如何解决这个问题?
答案 0 :(得分:2)
<强>更新强>
您的更新看起来不错,但仍有一个问题:您没有从permuteword
功能返回列表。我相信您还需要删除对console.log
的来电。一旦我做了这两件事,我就可以使用以下搜索查询来使用Cloudant(我还用&#34;非洲狮子&#34;更改为doc.name)改变了你的硬编码电话:
default:"african"
default:"african lion"
default:"lion"
default:"lion african"
这是最终的脚本:
function(doc){
var list = [];
function permute(ss, used, res, level, list){
if(level==ss.length&&res!==""){
list.push(res);
return;
}
for(var i=0; i<ss.length; i++){
if (used[i]===true){
continue;
}
if(level>=0){
if (res!="" && list.indexOf(res)<0){
list.push(res.trim());
}
used[i]=true;
permute(ss, used, res+" "+ss[i], level+1, list)
used[i]=false;
}
}
}
function permuteword(s){
var ss=s.split(" ");
var used = [];
var res = "";
list = [];
permute(ss, used, res, 0, list);
return list;
}
if (doc.name) {
var contentIndex=permuteword(doc.name);
for(var i=0; i<contentIndex.length; i++){
index("default", contentIndex[i]);
}
}
}
更新了JSFiddle:
https://jsfiddle.net/14e7L3gw/1/
原始答案
我相信您的Javascript存在问题。 permuteword
函数未返回任何结果。看到这个JSFiddle:
https://jsfiddle.net/14e7L3gw/
注意:我添加了一些日志记录并注释掉了对index的调用。使用浏览器调试器运行以查看输出。
以下是发生的事情:
permuteword
电话permute(["african","lion"], [], "", 0, []);
if
中的第一个permuteword
失败,因为level
(0)!= ss.length()
(2)和res
==&#34;&# 34。ss
,但从不做任何事情,因为level
= 0。permuteword
返回一个空数组,因此没有任何内容被编入索引。