elasticsearch 基于字段值增强ElasticSearch结果,elasticsearch,elasticsearch" /> elasticsearch 基于字段值增强ElasticSearch结果,elasticsearch,elasticsearch" />

elasticsearch 基于字段值增强ElasticSearch结果

elasticsearch 基于字段值增强ElasticSearch结果,elasticsearch,elasticsearch,我是一个ElasticSearchNoob,我正试图找出如何提高“title”字段中包含搜索词的搜索结果的相关性。例如,如果有两个文档: Title=“测试表单”Description=“这是一个新表单” Title=“新表格”Description=“测试” 如果用户在所有字段中搜索“test”,则文档1应得到增强,因为搜索词出现在标题字段中 我试图按照文档进行操作,但我不确定应该在何处包含该命令。它是应用于索引还是搜索,或者两者中的任何一个?它是否需要是另一个元素的一部分,或者可以作为单个命

我是一个ElasticSearchNoob,我正试图找出如何提高“title”字段中包含搜索词的搜索结果的相关性。例如,如果有两个文档:

  • Title=“测试表单”Description=“这是一个新表单”
  • Title=“新表格”Description=“测试”
  • 如果用户在所有字段中搜索“test”,则文档1应得到增强,因为搜索词出现在标题字段中

    我试图按照文档进行操作,但我不确定应该在何处包含该命令。它是应用于索引还是搜索,或者两者中的任何一个?它是否需要是另一个元素的一部分,或者可以作为单个命令发出

    这是我到目前为止所做的,5个文档被索引,然后应用boost,最后,搜索所有字段中的字符串“test”

    PUT http://localhost:9200//global/Form/456
    {
      "KeyWords": "",
      "OneLineDesc": "Test",
      "Link": "",
      "Title": "Test Form"
    }
    
    PUT http://localhost:9200//global/Form/457 
    {
      "KeyWords": "",
      "OneLineDesc": "",
      "Link": "",
      "Title": "Another Form"
    }
    
    PUT http://localhost:9200//global/Form/458 
    {
      "KeyWords": "",
      "OneLineDesc": "test form",
      "Link": "",
      "Title": "Ryans Form"
    }
    
    PUT http://localhost:9200//global/Form/460 
    {
      "KeyWords": "",
      "OneLineDesc": "",
      "Link": "",
      "Title": "permissions test"
    }
    
    PUT http://localhost:9200//global/Form/576 
    {
      "KeyWords": "",
      "OneLineDesc": "Test test test test test test test test",
      "Link": "",
      "Title": "My Test Form"
    }
    
    POST http://localhost:9200//global/Form 
    {
      "_boost": {
        "name": "Title",
        "null_value": 20
      }
    }
    
    POST http://localhost:9200/_search?search_type=query_then_fetch 
    {
      "from": 0,
      "size": 10,
      "query": {
        "match": {
          "_all": {
            "query": "test"
          }
        }
      }
    }
    
    但是,无论是否在索引后发出boost命令,结果中的分数都是相同的


    我更愿意在索引期间执行此增强操作,因为在所有文档中,标题字段将被认为比其他字段更重要。此外,在上面的示例中,每个文档的字段都是常量,但通常情况下并非如此,尽管所有文档都始终有一个标题字段。每个搜索都需要在所有可用字段上执行。

    一些事情。首先,必须在为文档编制索引之前指定索引时间。boost值在文档编制索引时烘焙到文档中,这意味着您无法在文档编制索引后对其进行boost

    这使得索引时间推进非常不灵活,通常很难使用。不建议使用索引时间提升,因为您可以通过查询时间提升完成同样的任务,并且仍然保持灵活性。一般来说,人们希望在不需要重新索引数据的情况下调整提升和得分

    我要做的是使用一个多匹配查询,它为您提供了几个好的行为。下面是一个示例(注意,您应该使用小写的索引名和类型名)。首先,像以前一样为数据编制索引:

    DELETE /global
    
    PUT /global/form/456 
    {
      "KeyWords": "",
      "OneLineDesc": "Test",
      "Link": "",
      "Title": "Test Form"
    }
    
    PUT /global/form/457 
    {
      "KeyWords": "",
      "OneLineDesc": "",
      "Link": "",
      "Title": "Another Form"
    }
    
    PUT /global/form/458 
    {
      "KeyWords": "",
      "OneLineDesc": "test form",
      "Link": "",
      "Title": "Ryans Form"
    }
    
    PUT /global/form/460 
    {
      "KeyWords": "",
      "OneLineDesc": "",
      "Link": "",
      "Title": "permissions test"
    }
    
    PUT /global/form/576 
    {
      "KeyWords": "",
      "OneLineDesc": "Test test test test test test test test",
      "Link": "",
      "Title": "My Test Form"
    }
    
    现在使用多重匹配同时搜索和增强:

    POST /global/form/_search
    {
        "query": {
            "multi_match": {
               "query": "test",
               "fields": ["Title^5", "_all"]
            }
        }
    }
    
    multi_match
    允许您对多个字段使用匹配查询。在本例中,我们正在搜索
    标题
    \u全部
    Title
    字段上的插入符号(
    ^5
    )为Title字段增加了5的提升值,这意味着
    Title
    上的匹配项得分高于任何其他字段上的匹配项。这将扭曲搜索结果,使标题匹配显示在顶部

    此外,默认情况下,
    multi_match
    使用
    dis_max
    查询,这是您想要的一般行为。通常,
    dis_max
    支持在单个字段中进行匹配,而不是分散在多个字段中


    例如,在标题字段中匹配
    quick-fox
    将比在标题和正文中匹配
    quick
    得分更高。

    回答得好!谢谢