elasticsearch 如何使用弹性搜索从文本中查找类似标记
我尝试使用elasticsearch 如何使用弹性搜索从文本中查找类似标记,elasticsearch,lucene,text-mining,elasticsearch,Lucene,Text Mining,我尝试使用弹性搜索从文本中查找最相似的标记 例如,我创建test_索引并插入两个文档: POST test_index/_doc/17 { "id": 17, "tags": ["it", "devops", "server"] } POST test_index/_doc/20 { "id": 20, "tags": ["software", "hardware"] } 因此,我希望从“我正在使用一些软件和应用程序”文本中找到“软件”标记(文本或id) 我希望有人能提供一个
弹性搜索
从文本中查找最相似的标记
例如,我创建test_索引并插入两个文档:
POST test_index/_doc/17
{
"id": 17,
"tags": ["it", "devops", "server"]
}
POST test_index/_doc/20
{
"id": 20,
"tags": ["software", "hardware"]
}
因此,我希望从“我正在使用一些软件和应用程序”文本中找到“软件”标记(文本或id)
我希望有人能提供一个例子,说明如何做到这一点,或者至少为我指明正确的方向
谢谢。您所寻找的只是一个称为的概念。您需要创建一个并利用 请查找以下映射、示例文档、查询和响应: 映射: 从评论中可以看出,您使用的是版本<7。为此,您可能需要在其中添加
类型
PUT my_stem_index
{
"settings":{
"analysis":{
"analyzer":{
"my_analyzer":{
"tokenizer":"standard",
"filter":[
"lowercase",
"my_stemmer"
]
}
},
"filter":{
"my_stemmer":{
"type":"stemmer",
"name":"english"
}
}
}
},
"mappings":{
"_doc":{
"properties":{
"id":{
"type":"keyword"
},
"tags":{
"type":"text",
"analyzer":"my_analyzer",
"fields":{
"keyword":{
"type":"keyword"
}
}
}
}
}
}
}
样本文件:
请求查询:
答复:
{
"take":3,,
“超时”:false,
“_碎片”:{
“总数”:1,
"成功":一,,
“跳过”:0,
“失败”:0
},
“点击次数”:{
“总数”:{
“价值”:2,
“关系”:“情商”
},
“最高分数”:0.5908618,
“点击次数”:[
{
“_索引”:“my_stem_索引”,
“\u类型”:“\u单据”,
“_id”:“20”,
“_分数”:0.5908618,
“_来源”:{
“id”:20,
“标签”:[
“软件”,
“硬件”
]
}
},
{
“_索引”:“my_stem_索引”,
“\u类型”:“\u单据”,
“_id”:“21”,
“_分数”:0.35965496,
“_来源”:{
“id”:21,
“标签”:[
“软件和应用程序”您所寻找的只是一个称为的概念。您需要创建一个并利用它
请查找以下映射、示例文档、查询和响应:
映射:
从注释中可以看出,您正在使用版本<7。为此,您可能需要在其中添加类型
PUT my_stem_index
{
"settings":{
"analysis":{
"analyzer":{
"my_analyzer":{
"tokenizer":"standard",
"filter":[
"lowercase",
"my_stemmer"
]
}
},
"filter":{
"my_stemmer":{
"type":"stemmer",
"name":"english"
}
}
}
},
"mappings":{
"_doc":{
"properties":{
"id":{
"type":"keyword"
},
"tags":{
"type":"text",
"analyzer":"my_analyzer",
"fields":{
"keyword":{
"type":"keyword"
}
}
}
}
}
}
}
样本文件:
请求查询:
答复:
{
"take":3,,
“超时”:false,
“_碎片”:{
“总数”:1,
"成功":一,,
“跳过”:0,
“失败”:0
},
“点击次数”:{
“总数”:{
“价值”:2,
“关系”:“情商”
},
“最高分数”:0.5908618,
“点击次数”:[
{
“_索引”:“my_stem_索引”,
“\u类型”:“\u单据”,
“_id”:“20”,
“_分数”:0.5908618,
“_来源”:{
“id”:20,
“标签”:[
“软件”,
“硬件”
]
}
},
{
“_索引”:“my_stem_索引”,
“\u类型”:“\u单据”,
“_id”:“21”,
“_分数”:0.35965496,
“_来源”:{
“id”:21,
“标签”:[
“软件和应用程序”,如果您搜索的文本有基本或根单词,词干分析是一种很好的方法
如果您需要从文本中找到最相似的单词,Ngram
是更合适的方法
如果您在word of tags中搜索文本的确切单词,木瓦是更好的方法。如果您搜索具有基本单词或根单词的文本,词干分析是一种好方法
如果您需要从文本中找到最相似的单词,Ngram
是更合适的方法
如果您在word of tags中搜索精确的文本单词,Shingles
是更好的方法。很抱歉我没有得到它,即使默认的analyzerstanard
也为文本软件创建了一个标记software
,那么为什么要使用词干标记,它不是词干文本。我认为OP中的问题不清楚。@es ENTU,如果您仔细注意的话,即使他搜索软件
(单数),他也希望返回包含软件的文档(复数)。另一个例子是,如果他搜索wordwait
,他应该会得到包含waiting、waiting
等内容的文档也会被返回。我想这就是OP正在寻找的内容。@OpsterESNinja Kamal您的映射设置不起作用,它有问题,原因是:“未能解析映射[属性]:根映射定义有不支持的参数:[id:{type=keyword}][tags:{analyzer=my_analyzer,type=text,fields={keyword={type=keyword}}}],我正在使用6.8版本。@OpsterESNinja Kamal我发现问题原因,您没有编写文档类型“_doc”映射后,请编辑您的答案。谢谢you@alireza我已经在7.6 ES版本上测试了该解决方案。在第7版之后,类型
已被弃用,因此默认类型将是\u doc
。请将所有这些详细信息放在您下次提出的任何问题中,这样我们就可以很容易地给您答案。无论如何,我将更新my相应地回答。很抱歉,我没有得到它,即使默认的analyzerstanard
也为文本软件创建了一个标记软件
,那么为什么要使用词干标记,它不是词干文本。我认为OP的问题不清楚。@es enthu如果您仔细注意,他希望文档具有软件
(复数)即使他搜索软件
(单数)也要返回。另一个例子是,如果他搜索word等待
,他应该会得到有等待、等待
等的文档也要返回。我想这就是OP要找的。@optsteresninja Kamal您的映射设置不起作用,它有问题,原因是“:”无法分析映射[properties]:根映射定义有不支持的参数:[id:{type=keyword}][tags:{analyzer=my_analyzer,type=text,fields={keyword={type=keyword}}}],我正在使用6.8版本。@OpsterESNinja Kamal我发现问题原因,您没有编写文档类型“_doc”映射后,请编辑您的答案。谢谢you@alireza我已经在7.6 ES版本上测试了该解决方案。在第7版之后,类型
已被弃用,因此默认类型将是\u doc
。请将所有这些详细信息放在您下次提出的任何问题中,这样我们就可以很容易地给您答案。无论如何,我将更新m我相应地回答。
POST my_stem_index/_doc/17
{
"id": 17,
"tags": ["it", "devops", "server"]
}
POST my_stem_index/_doc/20
{
"id": 20,
"tags": ["software", "hardware"]
}
POST my_stem_index/_doc/21
{
"id": 21,
"tags": ["softwares and applications", "hardwares and storage devices"]
}
POST my_stem_index/_search
{
"query": {
"match": {
"tags": "software"
}
}
}
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.5908618,
"hits" : [
{
"_index" : "my_stem_index",
"_type" : "_doc",
"_id" : "20",
"_score" : 0.5908618,
"_source" : {
"id" : 20,
"tags" : [
"software",
"hardware"
]
}
},
{
"_index" : "my_stem_index",
"_type" : "_doc",
"_id" : "21",
"_score" : 0.35965496,
"_source" : {
"id" : 21,
"tags" : [
"softwares and applications", <--- Note this has how `softwares` also was searchable.
"hardwares and storage devices"
]
}
}
]
}
}