在搜索引擎中怎么实现完全匹配查询 在搜索引擎中怎么实现完全匹配查询
在有搜索引擎之前,我们查文档常使用顺序匹配。我们需要在文档中顺序扫描,找到完全匹配的子句。
有的情况精确匹配比搜索引擎的查找有优势,比如这样的内容”chinese:1388838245“,如果用户输入”883“希望搜到这则内容,在常规的情况下是搜不到的。
这是因为在有了搜索引擎后,我们对查询语句做的处理就不一样了。我们通常会先分词,然后查找对应的词条索引,最后得到评分由高到低的文档列表。上面的例句在常规的分词情况下,没有也不可能有”883“这个词条,因此搜索不到这则内容。
我一度以为没法实现完全匹配了,直到一个硬需求的出现。花了一天时间,把完全匹配用搜索引擎的思维整理出来。
简要描述实现思路,字段按一字一词的形式分词,再利用短语查询来搜索。
ES中,可以实现一字一词的的分词器是NGram。
它其实是一个上下文相连续字符的分词工具,可以看官方文档中的例子。当我们将它 min_gram 和 max_gram 都设为1时,它会按一字一词的形式分词。比如“shinyke@189.cn”,分词的结果是["s" , "h" , "i" , "n" , "y" , "k" , "e" , "@" , "1" , "8" , "9" , "." , "c" , "n" ]。
<pre name="code" class="javascript">/index_name/
{
"settings": {
"analysis": {
"analyzer": {
"charSplit": {
"type": "custom",
"tokenizer": "ngram_tokenizer"
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "nGram",
"min_gram": "1",
"max_gram": "1",
"token_chars": [
"letter",
"digit",
"punctuation"
]
}
}
}
}
}
以上语句中,构建了一个名为“charSplit”的分析器。它使用一个名为“ngram_tokenizer”的Ngram分词器。
可以用如下语句测试charSplit分析器,可以看到一字一词的效果:
curl -POST http://IP:port/{index_name}/_analyze?pretty&analyzer=charSplit
"测试语句"
把这个分析器在mapping里用起来:
...
"sender": {
"type": "string",
"store": "yes",
"analyzer": "charSplit",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
},
...
接下来就可以用match_phrase来实现完全匹配查询。
/{index_name}/{type_name}/_search
{
"query": {
"multi_match": {
"query": "@189.cn",
"type": "phrase", //type指定为phrase
"slop": 0, //slop指定每个相邻词之间允许相隔多远。此处设置为0,以实现完全匹配。
"fields": [
"sender"
],
"analyzer": "charSplit", //分析器指定为charSplit
"max_expansions": 1
}
},
"highlight": { //测试高亮是否正常
"pre_tags": [
"<b>"
],
"post_tags": [
"</b>"
],
"fragment_size": 100,
"number_of_fragments": 2,
"require_field_match": true,
"fields": {
"sender": {}
}
}
}
phrase查询原始的作用是用来做短语查询,它有一个重要的特点:有顺序。我们利用了它匹配的有序性,限制slop为0,则可实现完全匹配查询。
以上语句返回的结果是:
{
"took": 18,
"timed_out": false,
"_shards": {
"total": 9,
"successful": 9,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.40239456,
"hits": [
{
"_index": "index_name",
"_type": "type_name",
"_id": "AU9OLIGOZN4dLecgyoKp",
"_score": 0.40239456,
"_source": {
"sender": "18977314000 <18977314000@189.cn>, 李X <18977314000@189.cn>, 秦X <18977314000@189.cn>, 刘X <18977314000@189.cn>"
},
"highlight": {
"sender": [
"18977314000 <18977314000<b>@</b><b>1</b><b>8</b><b>9</b><b>.</b><b>c</b><b>n</b>>, 李X <18977314000<b>@</b><b>1</b><b>8</b><b>9</b><b>.</b><b>c</b><b>n</b>>, 秦纯X <18977314000<b>@</b><b>1</b><b>8</b><b>9</b><b>.</b><b>c</b><b>n</b>>, 刘X <189773140"
]
}
}
]
}
}
到此,就实现了完全匹配查询。实际环境中用NGram做一字一词分析器的时候会更细致一些,比如有一些字符需要用stop word过滤掉。这些细节可以根据实际需要在构造分析器时添加filter实现,在此不做赘述。
在搜索引擎中怎么实现完全匹配查询~
字段按一字一词的形式分词,再利用短语查询来搜索。
ES中,可以实现一字一词的的分词器是NGram。
Ngram分词的官方文档地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html它其实是一个上下文相连续字符的分词工具,可以看官方文档中的例子。当我们将它 min_gram 和 max_gram 都设为1时,它会按一字一词的形式分词。比如“shinyke@189.cn”,分词的结果是["s" , "h" , "i" , "n" , "y" , "k" , "e" , "@" , "1" , "8" , "9" , "." , "c" , "n" ]。
/index_name/ { "settings": { "analysis": { "analyzer": { "charSplit": { "type": "custom", "tokenizer": "ngram_tokenizer" } }, "tokenizer": { "ngram_tokenizer": { "type": "nGram", "min_gram": "1", "max_gram": "1", "token_chars": [ "letter", "digit", "punctuation" ] } } } } }以上语句中,构建了一个名为“charSplit”的分析器。它使用一个名为“ngram_tokenizer”的Ngram分词器。
可以用如下语句测试charSplit分析器,可以看到一字一词的效果:
curl -POST http://IP:port/{index_name}/_analyze?pretty&analyzer=charSplit "测试语句"把这个分析器在mapping里用起来:
... "sender": { "type": "string", "store": "yes", "analyzer": "charSplit", "fields": { "raw": { "type": "string", "index": "not_analyzed" } }, ...接下来就可以用match_phrase来实现完全匹配查询。
/{index_name}/{type_name}/_search { "query": { "multi_match": { "query": "@189.cn", "type": "phrase", //type指定为phrase "slop": 0, //slop指定每个相邻词之间允许相隔多远。此处设置为0,以实现完全匹配。 "fields": [ "sender" ], "analyzer": "charSplit", //分析器指定为charSplit "max_expansions": 1 } }, "highlight": { //测试高亮是否正常 "pre_tags": [ "" ], "post_tags": [ "" ], "fragment_size": 100, "number_of_fragments": 2, "require_field_match": true, "fields": { "sender": {} } } }phrase查询原始的作用是用来做短语查询,它有一个重要的特点:有顺序。我们利用了它匹配的有序性,限制slop为0,则可实现完全匹配查询。
以上语句返回的结果是:
{ "took": 18, "timed_out": false, "_shards": { "total": 9, "successful": 9, "failed": 0 }, "hits": { "total": 1, "max_score": 0.40239456, "hits": [ { "_index": "index_name", "_type": "type_name", "_id": "AU9OLIGOZN4dLecgyoKp", "_score": 0.40239456, "_source": { "sender": "18977314000 , 李X , 秦X , 刘X " }, "highlight": { "sender": [ "18977314000 @189.cn>, 李X @189.cn>, 秦纯X @189.cn>, 刘X <189773140" ] } } ] } }到此,就实现了完全匹配查询。实际环境中用NGram做一字一词分析器的时候会更细致一些,比如有一些字符需要用stop word过滤掉。这些细节可以根据实际需要在构造分析器时添加filter实现,在此不做赘述。
1.给关键字 建立两个数组 或者在数据库里建立两个对应的字段也可以,一个是关键字表,一个是关键字的首拼表
2.在编辑框里输入首拼后,用寻找文本,寻找首拼表里相对应的首拼,然后把相对应的关键字表加入一个存储匹配的数组
3.获取插入符坐标,显示加入匹配数组的列表框
请使用搜索引擎的高手进来!
答:在搜索引擎中输入关键词,然后点击“搜索”就行了,系统很快会返回查询结果,这是最简单的查询方法,使用方便,但是查询的结果却不准确,可能包含着许多无用的信息。} 2、使用双引号用(" ") 给要查询的关键词加上双引号(半角,以下要加的其它符号同此),可以实现精确的查询,这种方法要求查询结果要精确匹配,不包括演变...
在搜索引擎中使用双引号这个高级语法的场景是( )。
答:使用引号来搜索一个完全匹配的字词或一组字词。在搜索歌词或文学作品中的一段文字时,此选项很实用。建议您只在查找非常确切的字词或词组时使用该功能,否则可能会无意中排除掉有用的搜索结果。搜索引擎 搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息...
怎样使用搜索引擎的强制搜索
答:使用搜索引擎的强制搜索方法如下:把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配,bd和Google 都支持这个指令;减号代表搜索不包含减号后面的词的页面,使用这个指令时减号前面必须是空格,减号后面没有空格,紧跟着需要排除的词;...
搜索有什么高级的检索方式么?
答:1、双引号“”:这叫完全匹配搜索,这样的结果更精准,比如我在搜索成都旅游的时候。这是不打双引号的结果(前面都是广告):这是打了双引号的结果(广告没有了):2、减号-:表示搜索结果不包括减号后面的词的内容(注意减号前面要跟一个空格)比如我搜索新加坡:加了-号后 3、inurl:查询url中带有...
如何高效地使用搜索引擎
答:1 “” 双引号表示完全匹配,结果中必须出现与搜索文本完全相同的内容。2 A -B 搜索包含A但不包含B的结果(请注意A后面的空格不能省略)3 filetype 搜索对应类型的文件。例如:中国防火墙 filetype:ppt,即为搜索包含主题中国防火墙的ppt文件。(请注意使用英文的冒号)4 site 在某个网站内搜索,比如...
搜索智能精选怎么弄
答:3. 精准匹配:智能筛选能够更精准地匹配用户需求与搜索结果,提高搜索满意度。注意事项:确保输入的关键词准确、具体,以便得到更精确的搜索结果。在选择智能筛选条件时,要根据实际需求进行选择,避免过于宽泛或过于具体的筛选条件。智能筛选结果可能会受到搜索引擎算法更新等因素的影响,因此定期尝试不同的搜索...
朋友们帮我归纳下搜索引擎高级指令嘛,完整点。多谢了!!!
答:1、“xxx”双引号,在双引号中代表完全匹配,也就是说搜索结果返回的页面包含双引号中出现的所有词,就连顺序也是完全匹配。2、“-” 减号,代表搜索引擎不包含减号后面的词的页面。3、“*”星号 ,常用的通配符,但是百度不支持*通配符搜索。4、inurl:用于查询出现在url中的页面,inurl指令支持中英文...
Bing宣布图像搜索的新AI调整:结果更精准介绍_Bing宣布图像搜索的新AI...
答:微软的Bing搜索引擎近日进行了一项关键的AI更新,提升了其图像搜索的精准度。这一调整侧重于多粒度匹配和对用户查询、图像、网页以及它们之间关系的深入理解。微软引入了BERT/Transformer技术,借鉴了谷歌的部分策略。首先,通过预训练模型,Bing能够更有效地解析文本信息,增强对查询的理解。其次,图像与网页...