弹性搜索与文本

时间:2018-04-05 11:22:33

标签: elasticsearch

我想按以下顺序搜索文字并相应地给出相应的分数:

  
      
  1. 匹配完整的词组
  2.   
  3. 所有字词(确切字词)都应出现在搜索结果中
  4.   
  5. 结果中应出现一些或至少一个单词
  6.   

这是我的问题:

{
  "_source": [
    "title"
  ],
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": {
              "query": "introduction to java",
              "fuzziness": 0,
              "operator": "and",
              "boost": 1
            }
          }
        },
        {
          "match_phrase": {
            "title": {
              "query": "introduction to java",
              "boost": 5
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  },
  "size": 20
}

但我先得到Javascript或jQuery而不是java。 结果:

{
"_score": 594.7316,
"_source": {
"title": "Introduction to jQuery Web Development"
}
}
,
{
"_score": 592.86993,
"_source": {
"title": "Introduction to JavaScript Development"
}
}
,
{
"_score": 592.8397,
"_source": {
"title": "A Comprehensive Introduction to Java Virtual Machine (JVM)"
}
}
,
{
"_score": 591.7474,
"_source": {
"title": "Introduction to Java for Programmers"
}
} 

我该怎么做才能实现这一目标?提前谢谢。

1 个答案:

答案 0 :(得分:0)

好的,这是我的错误。 我使用映射api在title字段上应用了edge_ngram分析器,这就是它搜索j / ja / jav / java的原因。

我删除了索引并创建了一个没有这个映射的新索引,它对我来说很好。