我在Elasticsearch中使用“完成建议程序”来允许部分单词匹配查询。在我的索引(products_index)中,我希望能够同时查询
product_name 字段和 brand 字段。这是我的映射:
POST /product_index
mappings: {
products: {
properties: {
brand: {
type: "string",
analyzer: "english"
},
product_name: {
type: "string",
analyzer: "english"
},
id: {
type: "long"
},
lookup_count: {
type: "long"
},
suggest: {
type: "completion",
analyzer: "simple",
payloads: true,
preserve_separators: true,
preserve_position_increments: true,
max_input_length: 50
},
upc: {
type: "string"
}
}
}
}
这是我的数据:
POST /product_index/products/2
{
id: 2,
brand: "Coca-Cola",
product_name: "Classic Coke",
suggest: {
input: [
"Classic Coke",
"Coca-Cola"
],
output: "Classic Coke - Coca-Cola",
payload: {
id: 2,
product_name: "Classic Coke",
brand: "Coca-Cola",
popularity: 10
},
weight: 0
}
}
这是我的查询:
POST /product_index/_search
"suggest": {
"product_suggest": {
"text": 'coca-co',
"completion": {
"field": 'suggest'
}
}
}
效果很好,除了我想给 product_name 字段赋予比 brand 字段更高的权重。有什么办法可以实现?我已经研究了有关使用
布尔
查询的文章,但是我对Elasticsearch还是很陌生,并且不确定如何在完成建议程序的情况下应用它。
非常感谢!
就像氧化还原所说的那样,完成建议器确实很简单,不支持条目提升。我的解决方案是创建两个建议字段,一个用于品牌,一个用于产品名称:
POST /product_index
{
"mappings": {
"products": {
"properties": {
"brand": {
"type": "string",
"analyzer": "english"
},
"product_name": {
"type": "string",
"analyzer": "english"
},
"id": {
"type": "long"
},
"lookup_count": {
"type": "long"
},
"product-suggest": {
"type": "completion",
"analyzer": "simple",
"payloads": true,
"preserve_separators": true,
"preserve_position_increments": true,
"max_input_length": 50
},
"brand-suggest": {
"type": "completion",
"analyzer": "simple",
"payloads": true,
"preserve_separators": true,
"preserve_position_increments": true,
"max_input_length": 50
},
"upc": {
"type": "string"
}
}
}
}
}
编制索引时,请填写两个字段:
POST /product_index/products/2
{
"id": 2,
"brand": "Coca-Cola",
"product_name": "Classic Coke",
"brand-suggest": {
"input": [
"Coca-Cola"
],
"output": "Classic Coke - Coca-Cola",
"payload": {
"id": 2,
"product_name": "Classic Coke",
"brand": "Coca-Cola",
"popularity": 10
}
},
"product-suggest": {
"input": [
"Classic Coke"
],
"output": "Classic Coke - Coca-Cola",
"payload": {
"id": 2,
"product_name": "Classic Coke",
"brand": "Coca-Cola",
"popularity": 10
}
}
}
查询时,同时对品牌和产品建议者提出建议:
POST /product_index/_search
{
"suggest": {
"product_suggestion": {
"text": "coca-co",
"completion": {
"field": "product-suggest"
}
},
"brand_suggestion": {
"text": "coca-co",
"completion": {
"field": "brand-suggest"
}
}
}
}
在删除重复项之后,您可以将品牌建议的提议列表附加到产品建议之一中,以仅具有相关建议,无重复项和产品建议的形式具有建议列表。
另一个解决方案是使用查询来提升品牌和产品,而不是使用建议者。但是,此实现比较慢,因为它不使用建议程序。
我想从多个领域得到建议。我找不到这样的例子,所以也许这不是最好的主意,但我对你的意见很感兴趣。 要求是: GET查询适用于文本“fyodor”和“dostoevsky”,此示例仅适用于“fyodor” 启用筛选建议 我有什么想法可以实现这些?
问题内容: 我已经在网上尝试了一些有关ElasticSearch的提示功能的示例代码,但是无法针对自动完成解决方案解决我的问题 我的索引: 我使用了suggestbuilder来获取关键字,然后扫描内容“字段”,这是由于没有结果而导致空指针异常的地方 我是否缺少一些过滤器或输入条件以获取结果?任何结果都应该可以,例如自动完成或找到记录。 编辑1: 这是我得到NPE的地方,我可以看到 调试模式下没有
问题内容: 如何为模糊匹配查询添加模糊性?因此,如果有人要搜索“棒球”,它仍然会找到“棒球”文章。目前,我的查询如下所示: 我正在寻找的一种选择是执行类似的操作,只是不知道这是否是最佳选择。保持基于评分的排序很重要: 有什么建议吗? 问题答案: 要将模糊性添加到多查询中,您需要按以下说明添加模糊性属性: 请注意,文档中的 prefix_length 解释为: 不会被“模糊化”的初始字符数。这有助于
我有ES索引,其中包含以下格式的文档,这些文档使用Fluentd解析器从日志中解析,并在ES中索引。记录格式: {"id":"id1","field 1":"f1_val","消息":"XXXX","时间":"XXXX"} {"id":"id1","field 2":"f2_val","消息":"XXXX","时间":"XXXX"} {"id":"id1","field 3":"f3_val","
问题内容: 我在ES 5.1中为数据建立索引时遇到的第一个错误是完成建议映射,其中包含一个输出字段。 所以我删除了它,但是现在我的许多自动补全都不正确,因为它返回匹配的输入而不是单个输出String。 经过一番谷歌搜索后,我发现ES中的这篇文章提到了以下内容: 由于建议是面向文档的,因此建议元数据(例如输出)现在应指定为文档中的字段。删除了对建立索引建议条目时指定输出的支持。现在,建议结果条目的文
问题内容: 我正在对具有字符串类型数组的文档字段进行自动完成建议。我的文件如下所示; 我正在 标签 字段上执行自动完成搜索。我的查询就像; 当用户键入“ word”时,我要显示“ wordland”和“ wordpress”。但是,我无法做到这一点。 您能帮上忙吗? 谢谢 问题答案: 您是否尝试过完成建议?解决问题的一种方法如下: 1)创建索引: 2)使用完成建议者类型创建映射: 3)添加文件: