ElasticSearch 如何精准搜索数组?精确搜索多值字段 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dbfox

ElasticSearch 如何精准搜索数组?精确搜索多值字段

  •  
  •   dbfox 2016 年 6 月 24 日 17566 次点击
    这是一个创建于 3592 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据格式如下,要求精确的搜索出 tags:"文字" 的记录 :

     { "_index" : "xxx", "_type" : "xxx", "_id" : "123", "_version" : 1, "_score" : 1, "_source" : { "iD" : 123, "name" : "xxx", "tags" : [ "文字", "恋爱", "冒险" ], "keywords" : [] } } 

    我在搜索的时候 tags:"文字" 的时候,会把下面的数据也检索出来,怎么精准的只搜索出 上面这个记录呢?

     { "_index" : "xxx", "_type" : "xxx", "_id" : "124", "_version" : 1, "_score" : 1, "_source" : { "iD" : 123, "name" : "xxx", "tags" : [ "A 文字 A", "恋爱", "冒险" ], "keywords" : [] } } 
    12 条回复    2016-06-27 12:06:56 +08:00
    slixurd
        1
    slixurd  
       2016 年 6 月 24 日   1
    用 term 搜索。另外 mappings 需要把 index 改成 not_analyzed 。因为默认是 standard analyzer ,所以 stop words 就被隔开了。
    dbfox
        2
    dbfox  
    OP
       2016 年 6 月 25 日
    @slixurd 晚上研究研究,这个 mappings 我设置了 not_analyzed 用的 C# 的 NEST 客户端,文档太少,真心难啊
    WinterWu
        3
    WinterWu  
       2016 年 6 月 25 日 via iPhone
    es 文档已经很全了,但是功能确实复杂。
    dbfox
        4
    dbfox  
    OP
       2016 年 6 月 25 日
    @slixurd 通过我的努力,最终我还是失败了
    还是会查询出来

    比如 我查询 tags:"红包"

    会把 tags:["抢红包","摇红包"] 这些搜索出来,不够精确,不知道为什么,也不知道从哪里下手
    slixurd
        5
    slixurd  
       2016 年 6 月 25 日
    @dbfox 用 HTTP 先测试成功再用其他客户端就好了。
    不过说白了,即使是 TCP Client ,最终的查询语句也是完全一样的。
    slixurd
        6
    slixurd  
       2016 年 6 月 25 日   1
    dbfox
        7
    dbfox  
    OP
       2016 年 6 月 26 日
    @slixurd 表示连接打不开 :-( ,感谢热情回复,晚上我再看看
    dbfox
        8
    dbfox  
    OP
       2016 年 6 月 26 日
    @slixurd
    192.30.252.141 gist.github.com
    绑定了 hosts 打开了
    dbfox
        9
    dbfox  
    OP
       2016 年 6 月 26 日
    @slixurd

    我用的 C# 客户端,重建了索引,依然不行,我测试下你的例子
    [String(Index = FieldIndexOption.NotAnalyzed)]


    using Nest;
    using System;

    namespace Common.ElasticSearch.Entities
    {
    [ElasticsearchType(IdProperty = "ID")]
    public class TopicEntity
    {
    public int ID { get; set; }

    [String(Index = FieldIndexOption.NotAnalyzed)]
    public string Key { get; set; }

    [String(Index = FieldIndexOption.NotAnalyzed)]
    public string Name { get; set; }

    [String(Index = FieldIndexOption.NotAnalyzed)]
    public string[] Tags { get; set; }

    /// <summary>
    /// 关键字
    /// </summary>
    public string[] Keywords { get; set; }


    /// <summary>
    /// 热度
    /// </summary>
    public int Hot { get; set; }
    }
    }
    dbfox
        10
    dbfox  
    OP
       2016 年 6 月 26 日
    @slixurd 测试了下你给的例子,是可行,我得仔细研究下 C# 的客户端 API
    slixurd
        11
    slixurd  
       2016 年 6 月 26 日   1
    C#我就不懂了,我是 Java 党。你加油。
    dbfox
        12
    dbfox  
    OP
       2016 年 6 月 27 日
    @slixurd 解决了,感谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2845 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 09:10 PVG 17:10 LAX 02:10 JFK 05:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86