Nic*_*las 2 java search elasticsearch
我目前正在开发一个涉及从文本中识别不同"关键字"的项目.
作为示例,我们假设以下输入文本:
"这是布宜诺斯艾利斯关于肉类的一些文字的例子".
进一步假设我的elasticsearch实例存储了以下文档:
城市:[巴塞罗那,布宜诺斯艾利斯,洛杉矶......]
和
分类:[金融,政治,......]
我需要一种方法来从输入文本中识别相应的城市和类别.
我的第一种方法是使用"或"运算符进行搜索查询,并查看哪一个具有最高排名.之后,我还将匹配的文件与文本重新匹配,以确保这些文本真的存在(换句话说,确保"洛杉矶"匹配,因为"洛杉矶"一词在文本中,只有"洛杉矶"或"洛杉矶).
我想知道它是否是使用Elasticsearch做这种事情的最佳实践方式.
我建议如下:
match_phrase查询来识别条款los并angeles存在并以相同的顺序和位置存在例如,创建此文档:
curl -XPOST 'http://127.0.0.1:9200/test/test?pretty=1' -d '
{
"text" : "This is an example of some text written from Buenos Aires about Meat"
}
'
Run Code Online (Sandbox Code Playgroud)
然后运行此查询以查找Buenos Aires或Los Angeles:
curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1' -d '
{
"query" : {
"constant_score" : {
"filter" : {
"or" : [
{
"fquery" : {
"_name" : "buenos_aires",
"query" : {
"match_phrase" : {
"text" : "Buenos Aires"
}
}
}
},
{
"fquery" : {
"_name" : "los_angeles",
"query" : {
"match_phrase" : {
"text" : "Los Angeles"
}
}
}
}
]
}
}
}
}
'
# {
# "hits" : {
# "hits" : [
# {
# "_source" : {
# "text" : "This is an example of some text written from Buenos Aires about Meat"
# },
# "_score" : 1,
# "_index" : "test",
# "_id" : "JIwnN_FVTv-0i5YGrlHLeg",
# "_type" : "test",
# "matched_filters" : [
# "buenos_aires"
# ]
# }
# ],
# "max_score" : 1,
# "total" : 1
# },
# "timed_out" : false,
# "_shards" : {
# "failed" : 0,
# "successful" : 5,
# "total" : 5
# },
# "took" : 58
# }
Run Code Online (Sandbox Code Playgroud)
注意matched_filters结果中的元素,指示哪个过滤器匹配.
| 归档时间: |
|
| 查看次数: |
2130 次 |
| 最近记录: |