精确搜索和全文字搜索(exact values vs. full text)

ES中的数据可以广义的分为两种类型:精确值和全文值

精确值就是想他们本来的意思一样存储。例如,date或者用户ID,可以作为精确的string类型进行存储,就像一个用户名或邮箱地址一样,精确的值“Foo”和精确值”foo“是不同的,精确值2014和精确值2014-09-15也是不同的。

全文字,也就是和文本数据——常常使用人类语言进行存储,就像是tweet中的texti或邮件的消息体。

full
text常常是”未结构化的数据“,这样说有点不合适,自然语言是高度的结构化的。问题是自然语言的标准是复杂的,这使得让计算机正确解析自然语言是很复杂的。例如:

May is fun but June bores me.

这个是指月份呢还是指人呢?

精确的数值让查询变得简单。这个决定是二进制的(The decision is
binary)——一个数值要么匹配查询,要么不匹配。就像是使用SQL表达式一样简单:

WHERE name    ="John Smith"
  AND user_id =2
  AND date    >"2014-09-15"

全文数据搜索是很微妙的,我们不但但是搜素”Does this document match the
query“而是”How well does this document match the
query?”也就是说document符合我们搜索的层度。

我们很少希望精确匹配这个字段,而是我们希望搜索的条件是包含在字段中。不进如此,我们还希望搜索明白我们的意图,比如:

1:搜索“UK”应该返回有关“United Kingdom”的document。

2:搜索“jump”应该返回符合“jumped”,“jumps”,“jumping”甚至是“leap”。

3:“johnny walker“应该匹配”Johnny Waler“、”johnnie depp“应该匹配”Johnny Deep“

4:fox news hunting”应该返回有关Fox news的hunting,然而“fox hunting
news”应该返回有关hunting的news。

为了有利于在全文字段对这些类型的查询 ,ES首先analyzes这些文字,然后使用结果构建一个inverted
index,我们会在接下来的两个章节讨论inverted index和analysis。

原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_exact_values_vs_full_text.html

时间: 2024-11-06 17:51:00

精确搜索和全文字搜索(exact values vs. full text)的相关文章

李彦宏:5年后语音和图片搜索会超文字搜索

李彦宏指出,语音是比文字更早.更自然的表达方式,在PC互联网时代语音方式不能表达需求,但现在百度10%进入搜索请求是以语音方式作为表达. 9月3日消息,百度CEO李彦宏今日在百度世界大会上表示,移动互联网不仅给互联网公司带来冲击,也给传统企业带来很大影响和冲击,未来用户搜索的方式会发生很大改变,未来5年使用语音和图片搜索来表达需求的比例会超过文字搜索. 李彦宏指出,语音是比文字更早.更自然的表达方式,在PC互联网时代语音方式不能表达需求,但现在百度10%进入搜索请求是以语音方式作为表达.对越来越

数据库9:联结表 高级联结 组合查询 全文本搜索

第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分.   外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系. 好处:供应商信息不重复,不浪费空间和时间,方便日后修改,一个表信息改动不影响另一个表的信息 联结是一种机制,使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行.   创建联结          

【转】MYSQL入门学习之三:全文本搜索

转载地址:http://www.2cto.com/database/201212/173873.html 一.理解全文本搜索 www.2cto.com 1.MyISAM支持全文本搜索,而InnoDB不支持. 2.在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词.MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行.这样MySQL可以快速有效地决定哪些词匹配,哪些词不匹配,它们匹配的频率,等等. 二.使用全文本搜索 1.为了进行全文本搜索,必须索引被搜索的列,

jQ禁止右键点击、隐藏搜索文本框文字、在新窗口中打开链接、检测浏览器、预加载图片、页面样式切换、所有列等高、动态控制页面字体大小、获得鼠标指针的X值Y值、验证元素是否为空、替换元素、延迟加载、验证元素是否存在于Jquery集合中、使DIV可点击、克隆对象、使元素居中、计算元素个数、使用Google主机上的Jquery类库、禁用Jquery效果、解决Jquery类库与其他Javascript类库冲突

1. 禁止右键点击 代码如下: $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return false; }); }); 2. 隐藏搜索文本框文字 代码如下: $(document).ready(function() { $("input.text1").val("Enter your search text here"); textFill($

Elasticsearch 全字段搜索_all,query_string查询,不进行分词

最近在使用ELasitcsearch的时候,需要用到关键字搜索,因为是全字段搜索,就需要使用_all字段的query_string进行搜索. 但是在使用的时候,遇到问题了.我们的业务并不需要分词,我在各个字段也设置了,not_analyzed.但是在使用query_string对_all字段进行查询的时候, 发现结果还是分词的.最后在官网找到这么一段话: Remember that the _all field is just an analyzed string field. It uses

MySQL数据检索+查询+全文本搜索

[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL数据检索+查询+全文本搜索" 的基础知识: [1]使用子查询 1)查询定义:任何sql 语句都是查询.但此术语一般指 select语句:SQL 还允许创建子查询,即嵌套在其他查询中的查询: 2)利用子查询进行过滤(where子句,in子句) 2.1)可以把一条select语句返回的结果用于另一条select语句的where子句: 3)作为计算字段使用子查询 3.1)

第十八章 全文本搜索

1.使用like和regexp进行文本的搜索有几个缺点: A:性能不高,通配符和正则表达式通常要求mysql尝试匹配表中所有行,由于行数多,这些搜索可能很耗时 B:使用正则表达式和通配符很难明确空值 C:虽然基于通配符和正则表达式的搜索提供了非常灵活的效率,但它们都不能提供一种智能化的选择结果 2.为了进行全文本搜索,必须索引被搜索的列,而且随着数据的改变不断重新索引.在索引之后select可与match()和against()一起使用. 3.一般在创建表时启用全文本搜索.create tabl

全文本搜索

仅在MyISAM引擎中支持全文本搜索 1.创建表时启用全文本搜索 e.g. CREATE TABLE productnotes ( note_id int NOT NULL AUTO_INCREMENT, prod_id char(10) NOT NULL, note_text text NULL, PRIMARY KEY(note_id), FULLTEXT(note_text) )ENGINE=MyISAM 这里FULLTEXT一个列,也可以指定多个列,用逗号隔开 2.索引之后,使用Matc

[Oracle]根据字段值全库搜索相关数据表和字段

这个需求比较冷门,但对于在某些特定的情况下,还是会有这样的需要的.好在Oracle实现还比较方便,用存储过程则轻松实现. 查询字符串: create or replace procedure search_string(pString in varchar) as cursor all_tab_cursor is select a.owner, a.table_name, b.column_name from dba_tables a, dba_tab_columns b, dba_object