- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在Elasticsearch中有如下文件:
{
"_index" : "demo_index",
"_type" : "doc",
"_id" : "user_122",
"_version" : 4,
"found" : true,
"_source" : {
"id" : 1520488,
"doc_type" : "user",
"user_email" : "neeraj@test.com",
"user_first_name" : "Neeraj",
"user_last_name" : "Goel"
}
}
接下来是返回零结果的查询。
{
"index": "demo_index",
"type": "doc",
"body": {
"from": 0,
"size": "200",
"query": {
"bool": {
"must": [
{
"term": {
"doc_type": "user"
}
},
{
"term": {
"user_status": 1
}
},
{
"multi_match": {
"query": "neeraj goel",
"operator": "AND",
"fuzziness": "AUTO",
"fields": [
"user_first_name.edge_ngram",
"user_last_name.edge_ngram"
]
}
}
],
"should": {
"prefix": {
"user_first_name.sort": "neeraj goel"
}
}
}
},
"sort": {
"_score": {
"order": "desc"
}
}
}
}
索引中使用的edge_ngram设置为:
{
"edge_ngram_tokenizer": {
"token_chars": [
"letter"
],
"min_gram": "2",
"type": "edge_ngram",
"max_gram": "8"
}
}
对应:
{
"user_first_name": {
"type": "text",
"fields": {
"edge_ngram": {
"type": "text",
"analyzer": "edge_ngram_analyzer"
},
"ngram": {
"type": "text",
"analyzer": "ngram_analyzer"
},
"raw": {
"type": "keyword"
}
},
"analyzer": "standard"
}
}
我无法弄清楚我的查询出了什么问题,因为如上所述,当文档中没有user_last_name时,查询工作正常。
最佳答案
由于您的索引设置和映射还不完整,并且不清楚要实现的目标,因此我添加了一个示例,该示例在您的用例附近有效并且可以理解,一旦添加更多数据,该示例便会更改。
索引定义以及映射和设置
{
"settings": {
"analysis": {
"analyzer": {
"edge_ngram_analyzer": {
"tokenizer": "edge_ngram_tokenizer"
},
"ngram_analyzer": {
"tokenizer": "ngram_tokenizer"
}
},
"tokenizer": {
"edge_ngram_tokenizer": {
"token_chars": [
"letter"
],
"min_gram": "2",
"type": "edge_ngram",
"max_gram": "8"
},
"ngram_tokenizer": {
"token_chars": [
"letter"
],
"min_gram": "2",
"type": "ngram",
"max_gram": "8"
}
}
},
"index.max_ngram_diff": 10 // note this
},
"mappings": {
"properties": {
"user_first_name": {
"type": "text",
"fields": {
"edge_ngram": {
"type": "text",
"analyzer": "edge_ngram_analyzer"
},
"ngram": {
"type": "text",
"analyzer": "ngram_analyzer"
},
"raw": {
"type": "keyword"
}
},
"analyzer": "standard"
},
"user_last_name": {
"type": "text",
"fields": {
"edge_ngram": {
"type": "text",
"analyzer": "edge_ngram_analyzer"
},
"ngram": {
"type": "text",
"analyzer": "ngram_analyzer"
},
"raw": {
"type": "keyword"
}
},
"analyzer": "standard"
}
}
}
}
并将示例文档添加到索引
{
"user_first_name" : "Neeraj",
"user_last_name" : "Goel"
}
并搜索查询
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "neeraj goel",
"operator": "or", // note this
"fuzziness": "AUTO",
"fields": [
"user_first_name.edge_ngram",
"user_last_name.edge_ngram"
]
}
}
],
"should": {
"prefix": {
"user_first_name.sort": "neeraj goel"
}
}
}
}
}
和搜索结果
"hits": [
{
"_index": "myindexedge",
"_type": "_doc",
"_id": "1",
"_score": 1.0500396,
"_source": {
"user_first_name": "Neeraj",
"user_last_name": "Goel"
}
}
]
关于elasticsearch - Elasticsearch 5.6 multi_match搜索,edge_ngram返回零结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64156800/
我有一个小问题,我开始使用Elasticsearch,并在使用curl脚本测试时遇到了这个问题。 curl -XGET 'localhost:9200/fcomputer/products/_sear
我试图重建我的 flex 搜索查询,因为我发现没有收到要查找的所有文档。 因此,假设我有这样的文档: { "id": 1234, "mail_id": 5, "sender": "john
我的记录可以对单个文本字段进行多种翻译,例如: { "type": "movie", "title": { "en": "Dark Knight", "de": "Der du
谁能告诉我这两者的区别 "query": { "bool": { "should": [ { "match": {"title": keyword} }
所以我们得到了一个 elasticsearch 实例,但是一个工作需要“组合搜索”(一个搜索字段,带有针对特定索引的 types 的复选框) 这很好,我只是将这种搜索应用于我的索引(为简洁起见:/po
我有一个具有名称和姓氏属性的用户对象。我想使用一个查询来搜索这些字段,并且在文档中找到了 multi_match,但我不知道如何将其与通配符一起正确使用。是否可以? 我尝试使用 multi_match
我有以下功能可以在 elasticsearch 中搜索结果。 我想用 PHP 和 Guzzle 执行以下请求。 /** * {@inheritdoc} */ public func
我在向嵌入在function_score内的现有多重匹配查询中添加过滤器时遇到问题。 理想情况下,我想按"term" : { "lang" : "en" }进行过滤,只获取英语版本的文档。 我尝试移动
我在 Elasticsearch 中使用以下 multi_match 查询,我想知道我是否可以仅对“friendly_name 字段”使用模糊性。我尝试过不同的东西,但似乎没有用。我还想知道是否有可能
我在简单的匹配查询中使用了 ES 的高亮显示: GET /_search { "query": { "match": { "Text": "key words he
如何为 multi_match 查询添加模糊性?因此,如果有人要搜索“basball”,它仍然会找到“baseball”文章。目前我的查询是这样的: POST /newspaper/articles/
在ElasticSearch 7.x中,我使用具有synonym filter的分析器为数据字段建立了索引。 但是,为了支持增强与数据字段中与同义词匹配的查询词“完全”匹配数据字段中的查询词的查询,我
我想使用ElasticSearch搜索我的产品集合。 如果我有这样的对象: { name: "Product Name", producer: "Best Producer"} 我想通过搜索找到该对象
我正在尝试在 ElasticSearch 中编写一个查询,在其中我将 multi_match 与过滤器结合起来用于 id 或数字 og id。 这是我目前所拥有的: { "query": {
我有一个包含条目的数据库 title: This is my awesome title abstract: A more detailed descriptions of what [...] 我想
我尝试学习 Elasticsearch 以将其添加到我的 Rails 应用程序中。我想对 2 个字段执行 multi_match 查询(就好像它们只是一个字段一样),并且还有一个必须等于 1 的另
我在 Elasticsearch 中使用 multi_match 查询: { "query": { "multi_match": { "query": "luk",
我有一个类型为 cross_fields 的 multi_match 查询,我想通过前缀匹配对其进行改进。 { "index": "companies", "size": 25, "fro
运行此查询时: { "query_string" : { "query" : "text", "fields": ["field1", "field2"] } } - {
示例查询: { "from": 0, "query": { "filtered": { "query": { "
我是一名优秀的程序员,十分优秀!