当前位置: 首页 > 面试题库 >

Spring搜索中同一字段上按类型的相关性

洪承天
2023-03-14
问题内容

有什么方法可以boost根据类型在同一字段上搜索结果?

我的基本提升是这样的:

GET _search
{
   "query": {
      "simple_query_string": {
         "query": "mangan",
         "fields":["_all", "title^6"]
      }
   }
}

但是对于其他一些文档,我希望标题不太重要,因此我尝试使用type作为前缀:

GET _search
{
   "query": {
      "simple_query_string": {
         "query": "mangan",
         "fields":[
            "_all",
            "DocumentationPage.title^6",
            "DocumentationPage.title^6"]
      }
   }
}

但是,这根本没有助益。作为最后的选择,我可以使用Funcsion / Script
Score
bu来避免这种情况。

例如,假设文档仅包含title字段。


问题答案:

实现此目的的一种简单方法是将OP中的查询重写为dis-
max查询

elasticsearch 5.x的示例:

 {
   "query": {
      "dis_max": {
         "queries": [
            {
               "simple_query_string": {
                  "fields": [
                     "_all"
                  ],
                  "query": "mangan"
               }
            },
            {
               "bool": {
                  "filter": {
                     "type": {
                        "value": "DocumentationPage"
                     }
                  },
                  "must": [
                     {
                        "simple_query_string": {
                           "fields": [
                              "title^6"
                           ],
                           "query": "mangan"
                        }
                     }
                  ]
               }
            }
         ]
      }
   }
}


 类似资料:
  • 问题内容: 我有一个Rails应用程序,我从Sphinx切换到ElasticSearch并使用gem searchkick。 我有一个教师模型和一个标签模型(通过宝石),其中一个教师可以关联多个标签。在教师模型中,我定义了这样的索引: 名称,简介和简介是教师的属性,但是我想为与该老师相关联的标签的名称建立索引。我怎样才能做到这一点? 现在,它索引对象的名称(关系),我如何索引标签对象内部的属性名称

  • 问题内容: 我有一个这样的映射: 我需要按对象的大小进行搜索。我已经试过了: 这是行不通的。给出错误 嵌套:ElasticSearchIllegalArgumentException [在类型为[post]的映射中未找到[提及]的字段]; 我还尝试过用替换脚本部分。这也是错误的 嵌套:ArrayIndexOutOfBoundsException [10]; 如何查询对象大小为2的记录? 问题答案:

  • 我有:一个实体有一个的集合,每个阶段都有一个的集合。Stage项可以有几种类型,我在JPA/Hibernate中使用它们作为带有鉴别器列的继承策略。 我需要lucene查询返回在类型a的阶段项(类中的字段)中具有特定细节的请求。我无法让hibernate搜索查看子类中的字段。 因此这个lucene查询不起作用(返回0个结果): 但基于中的字段进行搜索有效:

  • 我无法编写请求主体来获取弹性搜索中多个字段上的平均聚合。 我有两个字段field1和field2都是“double”数据类型。我能够获取单个字段的平均聚合。 这适用于单个字段: 和两个字段(给出错误) 我收到的错误是“类型为[avg]的聚合器[group\U By\U field1]无法接受子聚合”“无法解析名为[AVGVALUESOFCITEMPIDE]的BaseAgregationBuilde

  • 假设我有一个抽象类Product,我还有两个实体用不同的字段扩展它:ProductA和ProductB。我正在使用Product repository,使用Specification和SpecificationBuilder,并使用一些常用字段来搜索它们。我想完成的是检测它是什么类型的产品(A或B),并在此基础上使用不同的搜索查询。 例如,ProductA有库存,ProductB有功能,因此如果我

  • 问题内容: 在文档中,某些类型(例如数字和日期)指定存储默认为no。但是该字段仍然可以从json中检索。 令人困惑。这是否表示_source? 有没有办法根本不存储字段,而只是对其建立索引并进行搜索? 问题答案: 默认情况下,不存储任何字段类型。只有领域。这意味着您始终可以取回发送给搜索引擎的内容。即使您要求特定的字段,elasticsearch也会为您解析该字段并将其退还给您。 您可以根据需要禁