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 };

 

posted @ 2021-07-31 18:18  青兰柳  阅读(887)  评论(0编辑  收藏  举报