java - Elasticsearch 结果与我的映射字段查询不太准确

标签 java elasticsearch kibana elastic-stack

请在下面找到我的文件名字段的映射查询。

PUT /articles
{
   "settings" : {
      "analysis" : {
         "analyzer" : {
            "filename_search" : {
               "tokenizer" : "filename",
               "filter" : ["lowercase"]
            },
            "filename_index" : {
               "tokenizer" : "filename",
               "filter" : ["lowercase","edge_ngram"]
            }
         },
         "tokenizer" : {
            "filename" : {
               "pattern" : "[^\\p{L}\\d]+",
               "type" : "pattern"
            }
         },
         "filter" : {
            "edge_ngram" : {
               "side" : "front",
               "max_gram" : 50,
               "min_gram" : 1,
               "type" : "edgeNGram"
            }
         }
      }
   },
   "mappings" : {
      "doc" : {
         "properties" : {
            "filename" : {
               "type" : "text",
               "search_analyzer" : "filename_search",
               "analyzer" : "filename_index"
            }
         }
      }
   }
}

如果我尝试查询series1333372 doc623258并且期待karthik_series1333372_oracle_page_doc623258_v1_en-EU.pdf。但它提供了所有具有 series1333372 的文件,甚至没有检查 doc623258

请在下面找到我的查询

get articles/_search
{
   "query" : {
      "match" : {
         "filename" : "series1333372 doc623258"
      }
   }
}

我插入以下示例文档以从 Kibana 进行测试

POST articles/doc/1
{
  "filename" : "karthik_series1333372_oracle_page_doc623258_v1_en-EU.pdf"
}

POST articles/doc/2
{
  "filename" : "karthik_series1333372_sun_page_doc658_v1_en-EU.pdf"
}

POST articles/doc/3
{
  "filename" : "series1333372_oracle_page_doc623_v1_en-US.pdf"
}

POST articles/doc/4
{
  "filename" : "Engineering series1333372 valve_page doc6232 v1_en-US.pdf"
}

POST articles/doc/5
{
  "filename" : "Machines_series1333372_page_doc62258_v1_en-US.pdf"
}

POST articles/doc/6
{
  "filename" : "AIX series1333372 IBM page doc62358 v1_en-EU.pdf"
}

最佳答案

match的默认运算符是OR。如果您希望所有条款都存在,请像这样更改

GET articles/_search
{
   "query" : {
      "match" : {
         "filename" : {
           "query": "series1333372 doc623258",
            "operator" : "and"
         }
      }
   }
}

关于java - Elasticsearch 结果与我的映射字段查询不太准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50838887/

相关文章:

java - 我的 EJB 抛出需要事务的异常,尽管另一个 EJB 以相同方式设置且具有相同持久性单元不会抛出任何异常

java - LinkedIn - 了解用户 api 访问与服务器 api 访问

elasticsearch - 如何在 Nest for Elasticsearch 中添加完整的短语分词器?

elasticsearch - 如何使用logstash和filebeat过滤日志文件

elasticsearch - ELK - 屏蔽身份验证问题

elasticsearch - logstash将字符串转换为日期

mongodb - 无法将filebeat输出发送到mongodb

java - "Simple"Trie实现

java - Spring MVC中Controller层和Service层如何实现正确的交互

c# - 使用自定义运算符组合 Lambda 表达式