如何在Elasticsearch中进行Match查询,针对这个问题,本文详细介绍了相应的分析和解答,希望能帮助更多想要解决这个问题的朋友找到更简单更容易的方法。
如果你索引词对而不是独立的词,你可以尽可能保持这些词的上下文。这是你需要使用木瓦的时候。
例子:苏阿泰智能体
unigram:['sue ',' ate ',' the ','鳄鱼']
二元模型:[' suate ',' atethe ',' the intelligent ']
三元组:[' suatethe ',' atethe integer ']
备注:
三元组提供了更高的准确性,但也大大增加了索引中唯一术语的数量。在大多数情况下,二元模型就足够了。
幸运的是,用户倾向于通过使用类似于搜索数据的结构来表达他们的搜索意图。
但这很重要:索引二元模型是不够的;我们仍然需要单图,但是我们可以使用匹配双图作为增加相关性分数的信号。
索引时,需要创建Gles作为分析过程的一部分。
我们可以将unigrams和bigrams索引到一个字段中,但是将它们分别保存在可以独立查询的字段中更清楚。
Unigrams字段将构成我们搜索的基本部分,而bigrams字段用于提高相关性。注意:
术语匹配
只有当用户输入的查询内容与原始文档中的顺序相同时,瓦片区才有用。
总结:
使用短语查询时,最好使用Es默认的标准分词(标准分词:细粒度分词),这样可以使查询分词和索引分词尽可能匹配。
它特别适用于要求前后词语搭配的情况(例如人名、地名.).
00-1010新索引设置:
PUT/my_index
{
设置' :{
碎片数量' :1,
分析' :{
过滤器' :{
my _带状疱疹_filter':{
类型' : '木瓦',
最小带状疱疹大小' :2,
max _带状疱疹_size':2,
(=NationalBureauofStandards)国家标准局
p; "output_unigrams": false
}
},
"analyzer": {
"my_shingle_analyzer": {
"type": "custom",
"tokenizer":"standard",
"filter": [
"lowercase",
"my_shingle_filter">
测试阶段
1.match查询
GET /my_index/_doc/_search { "query": { "match": { "title": "the hungry alligator ate sue" } } } 查询结果: { "took" : 3, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3, "max_score" : 1.3721708, "hits" : [ { "_index" : "my_index", "_type" : "_doc", "_id" : "1", "_score" : 1.3721708,#两个文档都包含 the 、 alligator 和 ate ,所以获得相同的评分。 "_source" : { "title" : "Sue ate the alligator" } }, { "_index" : "my_index", "_type" : "_doc", "_id" : "2", "_score" : 1.3721708,#两个文档都包含 the 、 alligator 和 ate ,所以获得相同的评分。 "_source" : { "title" : "The alligator ate Sue" } }, { "_index" : "my_index", "_type" : "_doc", "_id" : "3", "_score" : 0.21526179,#我们可以通过设置 minimum_should_match 参数排除文档 3 ,参考 控制精度 。 "_source" : { "title" : "Sue never goes anywhere without her alligator skin purse" } } ] } } 分析: 注意文档 1 和 2 有相同的相关度评分因为他们包含了相同的单词
2.match.shingles查询
GET /my_index/_doc/_search { "query": { "bool": { "must": { "match": { "title": "the hungry alligator ate sue" } }, "should": { "match": { "title.shingles": "the hungry alligator ate sue" } } } } } 查询结果: { "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 3, "max_score" : 3.6694741, "hits" : [ { "_index" : "my_index", "_type" : "_doc", "_id" : "2", "_score" : 3.6694741, "_source" : { "title" : "The alligator ate Sue" } }, { "_index" : "my_index", "_type" : "_doc", "_id" : "1", "_score" : 1.3721708, "_source" : { "title" : "Sue ate the alligator" } }, { "_index" : "my_index", "_type" : "_doc", "_id" : "3", "_score" : 0.21526179, "_source" : { "title" : "Sue never goes anywhere without her alligator skin purse" } } ] } } 分析: 仍然匹配到了所有的 3 个文档, 但是文档 2 现在排到了第一名因为它匹配了 shingled 词项 ate sue.
关于Elasticsearch中如何进行Match查询问题的解答就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/97034.html