elasticsearch 根据单词索引更改搜索顺序,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch 根据单词索引更改搜索顺序,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch 根据单词索引更改搜索顺序

elasticsearch 根据单词索引更改搜索顺序,elasticsearch,lucene,elasticsearch,Lucene,有没有办法增加文件开头的术语的分量?例如,我有3份文件 Medicine XXX Sulpher This medicine contains sulpher and should be taken only after consultation with your doctor. Medicine YYY contains: sulpher Not recommended by most physicians Medicine ZZZ This medicine works like su

有没有办法增加文件开头的术语的分量?例如,我有3份文件

Medicine XXX
Sulpher This medicine contains sulpher and should be taken only after consultation with your doctor.

Medicine YYY
contains: sulpher Not recommended by most physicians

Medicine ZZZ
This medicine works like sulpher but does not contain sulpher at all.

文档XXX应列在搜索词“sulfer”的顶部,因为这是该文档中的第一个单词。如果YYY列在顶部,则可以,因为它与XXX相同。但ZZZ应该永远是最后一个。换句话说,在文档“左”端找到的术语应该比在“右”端找到的术语具有更高的优先级。

您可以使用小写规范化术语位置:

PUT sulphur
{
  "settings": {
    "analysis": {
      "normalizer": {
        "keyword_lowercase": {
          "type": "custom",
          "filter": ["lowercase"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "normalizer": "keyword_lowercase"
          }
        }
      }
    }
  }
}

POST sulphur/_doc
{"text":"This medicine works like sulpher but does not contain sulpher at all."}
POST sulphur/_doc
{"text":"contains: sulpher Not recommended by most physicians"}
POST sulphur/_doc
{"text":"Sulpher This medicine contains sulpher and should be taken only after consultation with your doctor."}
然后

GET sulphur/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "function_score": {
            "query": {
              "match": {
                "text": "sulpher"
              }
            },
            "script_score": {
              "script": """
                def pos = doc['text.keyword'].value.indexOf('sulpher');
                return Math.exp((2.0/(pos+1)))
              """
            },
            "boost_mode": "replace"
          }
        }
      ]
    }
  }
}
屈服

[
  {
    "_index":"sulphur",
    "_type":"_doc",
    "_id":"sf5S2nEBW-D5QnrWODvB",
    "_score":7.389056,
    "_source":{
      "text":"Sulpher This medicine contains sulpher and should be taken only after consultation with your doctor."
    }
  },
  {
    "_index":"sulphur",
    "_type":"_doc",
    "_id":"sP5S2nEBW-D5QnrWNjtw",
    "_score":1.1993961,
    "_source":{
      "text":"contains: sulpher Not recommended by most physicians"
    }
  },
  {
    "_index":"sulphur",
    "_type":"_doc",
    "_id":"r_5S2nEBW-D5QnrWNDuw",
    "_score":1.079959,
    "_source":{
      "text":"This medicine works like sulpher but does not contain sulpher at all."
    }
  }
]

如果我有大量的文档,脚本会扩展吗?我想是的
indexOf
不是复杂的操作。