我对Elasticsearch没问题,但是对我来说解决这个问题有点先进。如果我有一个单词数组,该如何搜索包含字符串字段(其中包含90%的单词)的文档?
例如
iKnowTheseWords = ["word1","word2","word3","word4","word5","word6","word7","word8","word9"]
documents = [
{
"id": "1",
"content": "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10"
},
{
"id": "2",
"content": "word1 word2 word3 word4"
},
{
"id": "3",
"content": "word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12 word13 word14"
}
]
在上面的示例中,我希望返回ID为1和2的文档,但不返回ID 3,因为它包含的单词比我所知道的更多,并且超过了90%的阈值(文档1很好,因为我知道其中90%个字)。
很显然,有一些方法可以通过编程方式解决此问题,但是我希望能够在Elasticsearch查询级别上做到这一点。
非常感谢您的帮助。
答案 0 :(得分:1)
我从没做过,但是我将从查看should in bool queries或constant score开始,以便您可以根据点击量来量化得分
答案 1 :(得分:0)
在使用函数式编程的普通JavaScript中,您可以执行以下操作:
var threshold = 0.9; // 90%
var found = documents
.filter(document => {
var numberOfWordsFound = iKnowTheseWords
.reduce((total, word) => {
var hasWord = document.content.split(word).length > 1;
return hasWord ? (total + 1) : total;
}, 0);
var precentage = numberOfWordsFound / iKnowTheseWords.length;
return precentage > threshold;
});
found
变量将包含所有满足阈值的文档。