
Elasticsearch 基于词项和基于全文的搜索
基于 Term 的查询
Term 的重要性
Term 是表达语意的最小单位。搜索和利用语言统计模型进行自然语言的处理都需要处理 Term
特点
—— Term Level Query:Term Query / Range Query / Exists Query / Prefix Query / Wildcard Query
—— 在 ES 中,Term 查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公司为每个包含该词项的文档进行相关度算分 — 例如 “Apple Store”
—— 可以通过 Constant Score 将查询转换成一个 Filtering,避免算分,并利用缓存,提高性能
关于 Term 查询的例子
准备一些案例代码数据
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "productID" : "XHDK-A-1293-#fJ3","desc":"iPhone" }
{ "index": { "_id": 2 }}
{ "productID" : "KDKE-B-9947-#kL5","desc":"iPad" }
{ "index": { "_id": 3 }}
{ "productID" : "JODL-X-1937-#pV7","desc":"MBP" }
通过Term的方式进行查询。
POST /products/_search
{
"query": {
"term": {
"desc": {
//"value": "iPhone"
"value":"iphone"
}
}
}
}
注意:这是因为我们在添加数据进行索引的时候,Elasticsearch 自动的为数据添加默认的analyzer(变为小写),而并不是Term进行了分词处理。
多字段 Mapping 和 Term 查询
通过GET /products/_mapping
的查询出 Elasticsearch 会自动为字段赋值类型,这里为keyword
这里我们也可以通过指定 keyword
来进行查询
POST /products/_search
{
"query": {
"term": {
"desc.keyword": {
"value": "iPhone"
}
}
}
}
但是在这里我们发现它仍然有一个 _score
的算分统计,它或多或少会影响系统性能。我们可以通过 Constant Score 告诉系统不进行算分。
复合查询 — Constant Score 转为 Filter
—— 将 Query 转成 Filter,忽略 TF-IDE 计算,避免相关性算分的开销。
—— FIlter 可以有效利用缓存。
POST /products/_search
{
"explain": true,
"query": {
"constant_score": {
"filter": {
"term": {
"desc.keyword": {
"value": "iPhone"
}
}
}
}
}
}
基于全文本的查询
基于全文本的查找
Match Query / Match Phrase Query / Query String Query
特点
—— 索引和搜索时都会进行分词,查询字符串先传递到一个合适的分词器,然后生成一个供查询的词项列表
—— 查询时候,先会对输入的查询进行分词,然后每个词项逐个进行底层的查询,最终将结果进行合并。并为每一个文档生成一个算分。例如:查“Matrix reloaded”,会查到包括Matrix
或者reload
的所有结果。
有关更多,大家可以参考以前的文章:https://www.tnblog.net/hb/article/details/5071
总结
首先Term查询是不会进行分词的,但在添加数据的索引的时候是会进行分词处理的,而全文本也会进行分词处理。
当然在用Term查询时,我们可以用字段 Mapping 去控制字段的分词(将字段类型写成Keyword),在用全文文本查询时也可以用适当的Precision & Recall去进行精确的查找。最后Constant Score
可以将Term查询转换为Filter,取消算分缓解,以达到提升性能的目的。
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术