我想使用ElasticSearch来分隔字符串中的标记,说我有一个字符串,我想从中提取名称:
John Smith had a little lamb
我的想法是创建它的多个版本,在名称索引中搜索它们,然后获得得分最高的版本:
John
John Smith
John Smith had
....
用ElasticSearch做到这一点的最佳方法是什么?
编辑: 我想要这样的东西:
//this combination is not right, gives me a low score
{
"query": {
"bool" : {
"should" : [
{ "match" : { "name" : "John" } },
],
}
}
}
//this combination is right, gives me a high score
{
"query": {
"bool" : {
"should" : [
{ "match" : { "name" : "John" } },
{ "match" : { "name" : "Smith" } },
],
}
}
}
//this one also gives me a low score, stop searching here
{
"query": {
"bool" : {
"should" : [
{ "match" : { "name" : "John" } },
{ "match" : { "name" : "Smith" } },
{ "match" : { "name" : "had" } },
],
}
}
}
我如何仅用一个查询就能完成此过程?
答案 0 :(得分:0)
我不太清楚您将如何从此文档中提取名称。当然,elasticsearch不能做的事情并且将需要来自某些逻辑…… 名称是否总是以大写字母开头的单词分类?如果是这样,请使用空格分析器,因为英语分析器将小写并阻止这些术语
关于分数,我不清楚这对您有什么帮助……分数最高的是最不常用的术语-羔羊在您的索引中可能不如约翰或史密斯一词那么常见,但“小”可能更常见,所以我不知道这将如何帮助您知道名字叫“约翰·史密斯” 还是说您正在寻找两个标记/单词的集合...
也许这里的问题是围绕澄清您想要实现的目标,然后您可以检查ES如何做到这一点