匹配弹性搜索中的存储值和查询
Matching the stored values and queries in Elastic Search
我有一个名为“名称”的嵌套字段,它是弹性搜索中的“关键字”。
名称字段包含 2 个值。
- 贾甘纳坦·拉贾戈帕兰
- 拉贾戈帕兰。
如果我查询“Rajagopalan”,我应该只会得到第 2 项。
如果我查询完整的 Jagannathan Rajagopalan,我应该得到 #1。
如何实现?
您需要使用用于精确搜索的term query。根据您的 use-case.
添加了一个工作示例
索引映射
{
"mappings": {
"properties": {
"name": {
"type": "nested",
"properties": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
索引示例文档
{
"name" : {
"keyword" : "Jagannathan Rajagopalan"
}
}
还有一个文档
{
"name" : {
"keyword" : "Jagannathan"
}
}
和搜索查询
{
"query": {
"nested": {
"path": "name",
"query": {
"bool": {
"must": [
{
"match": {
"name.keyword": "Jagannathan Rajagopalan"
}
}
]
}
}
}
}
}
搜索结果
"hits": [
{
"_index": "key",
"_type": "_doc",
"_id": "2",
"_score": 0.6931471,
"_source": {
"name": {
"keyword": "Jagannathan Rajagopalan"
}
}
}
]
我有一个名为“名称”的嵌套字段,它是弹性搜索中的“关键字”。
名称字段包含 2 个值。
- 贾甘纳坦·拉贾戈帕兰
- 拉贾戈帕兰。
如果我查询“Rajagopalan”,我应该只会得到第 2 项。 如果我查询完整的 Jagannathan Rajagopalan,我应该得到 #1。
如何实现?
您需要使用用于精确搜索的term query。根据您的 use-case.
添加了一个工作示例索引映射
{
"mappings": {
"properties": {
"name": {
"type": "nested",
"properties": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
索引示例文档
{
"name" : {
"keyword" : "Jagannathan Rajagopalan"
}
}
还有一个文档
{
"name" : {
"keyword" : "Jagannathan"
}
}
和搜索查询
{
"query": {
"nested": {
"path": "name",
"query": {
"bool": {
"must": [
{
"match": {
"name.keyword": "Jagannathan Rajagopalan"
}
}
]
}
}
}
}
}
搜索结果
"hits": [
{
"_index": "key",
"_type": "_doc",
"_id": "2",
"_score": 0.6931471,
"_source": {
"name": {
"keyword": "Jagannathan Rajagopalan"
}
}
}
]