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

2016-06-24 23:17:56 +08:00
 dbfox

数据格式如下,要求精确的搜索出 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" : []
		}
	}
17201 次点击
所在节点    问与答
12 条回复
slixurd
2016-06-24 23:24:35 +08:00
用 term 搜索。另外 mappings 需要把 index 改成 not_analyzed 。因为默认是 standard analyzer ,所以 stop words 就被隔开了。
dbfox
2016-06-25 13:16:36 +08:00
@slixurd 晚上研究研究,这个 mappings 我设置了 not_analyzed 用的 C# 的 NEST 客户端,文档太少,真心难啊
WinterWu
2016-06-25 14:40:38 +08:00
es 文档已经很全了,但是功能确实复杂。
dbfox
2016-06-25 17:15:23 +08:00
@slixurd 通过我的努力,最终我还是失败了
还是会查询出来

比如 我查询 tags:"红包"

会把 tags:["抢红包","摇红包"] 这些搜索出来,不够精确,不知道为什么,也不知道从哪里下手
slixurd
2016-06-25 19:06:32 +08:00
@dbfox 用 HTTP 先测试成功再用其他客户端就好了。
不过说白了,即使是 TCP Client ,最终的查询语句也是完全一样的。
slixurd
2016-06-25 19:20:10 +08:00
dbfox
2016-06-26 10:44:16 +08:00
@slixurd 表示连接打不开 :-( ,感谢热情回复,晚上我再看看
dbfox
2016-06-26 10:48:19 +08:00
@slixurd

192.30.252.141 gist.github.com
绑定了 hosts 打开了
dbfox
2016-06-26 10:53:42 +08:00
@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
2016-06-26 10:57:31 +08:00
@slixurd 测试了下你给的例子,是可行,我得仔细研究下 C# 的客户端 API
slixurd
2016-06-26 11:12:57 +08:00
C#我就不懂了,我是 Java 党。你加油。
dbfox
2016-06-27 12:06:56 +08:00
@slixurd 解决了,感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/288165

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX