ElasticSearch的学习
1下载ElasticSearch包,下载解压就行
2在chrome浏览器添加Sense,
请求报
在sense下载包中的src目录下面base.js文件中的ajax方法中(只有一个)添加一行代码
contentType: 'application/json',
3不能输入中文,在\lib\src-noconflict\ace.js中修改代码
var onTextInput = function(e) { // 下面是新增代码 // 当为中问输入时,且还在继续输入时不处理每次键入的字符,直接return if (inCompostion) return; // 上面是新增代码 if (!inCompostion) sendText(e.data); setTimeout(function () { if (!inCompostion) reset(true); }, 0); }; var onCompositionEnd = function(e) { inCompostion = false; host.onCompositionEnd(); // 下面是新增代码 // 当输入完毕后处理输入内容 sendText(e.data); };
4报
Failed to parse mapping [post]: analyzer [ik_max_word] has not been configured in mappings
这是没有安装分词器,需要下载通版本的的安装(都是7.13.4),下载完以后,就找到你的es的plugins文件夹,将zip解压,然后删掉zip。重启es就可以了(重启如果闪退,就在plugins下创建一个文件elasticsearch-analysis-ik-7.13.4)然后就可以了,后续碰到问题再记录
安装之后,可以再class中设置分词属性(好像没什么用)
[ElasticsearchType(RelationName = "company")] public class Company { public int CompanyID { get; set; } public int AccountID { get; set; } [Text( Analyzer = "ik_smart")] public string CompanyName { get; set; } }
参考https://www.cnblogs.com/netlock/p/13899368.html
https://www.cnblogs.com/johnyong/p/12906370.html
完全匹配用 MatchPhrase
在net webapi中使用es
var query2 = new TermQuery { Field = "code", Value = input.FaultCode };
一直查不到数据,
term做精确查询可以用它来处理数字,布尔值,日期以及文本。查询数字时问题不大,但是当查询字符串时会有问题。term查询的含义是termQuery会去倒排索引中寻找确切的term,但是它并不知道分词器的存在。term表示查询字段里含有某个关键词的文档,terms表示查询字段里含有多个关键词的文档。也就是说直接对字段进行term本质上还是模糊查询,只不过不会对搜索的输入字符串进行分词处理罢了。如果想通过term查到数据,那么term查询的字段在索引库中就必须有与term查询条件相同的索引词,否则无法查询到结果。
一句话解释: elasticsearch 里默认的IK分词器是会将每一个中文都进行了分词的切割,所以你直接想查一整个词,或者一整句话是无返回结果的。
解决办法:
将字段的type设置为keyword,即
var query2 = new TermQuery { Field = "code.keyword", Value = input.FaultCode };