我想要实现的目标:
文件:“一二三四”
搜索字符串:
到目前为止我学到了什么:
为了计算订单,span_near应使用查询,但这假设客户已经分析了这些术语(所有术语必须单独提供)。
要分析搜索字符串,phrase_match应使用查询,但不考虑顺序。
很可能应该使用脚本(感谢@ChintanShah25),但似乎不可能分析脚本内的输入字符串。
如何同时满足分析和订单需求?
没有直接的方法可以实现此目的,您可以通过使用_analyze端点与span query或与script和来做到这一点match_phrase
1)您将搜索字符串传递给_analyze
curl -XGET 'localhost:9200/_analyze' -d '
{
  "analyzer" : "my_custom_analyzer",
  "text" : "one four"
}'
Run Code Online (Sandbox Code Playgroud)
你会得到这样的东西
{
   "tokens": [
      {
         "token": "one",
         "start_offset": 0,
         "end_offset": 3,
         "type": "<ALPHANUM>",
         "position": 1
      },
      {
         "token": "four",
         "start_offset": 4,
         "end_offset": 8,
         "type": "<ALPHANUM>",
         "position": 2
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)
然后你将令牌传递给span query
{
    "span_near" : {
        "clauses" : [
            { "span_term" : { "field" : "token1" } },
            { "span_term" : { "field" : "token2" } }
        ],
        "slop" : 2,
        "in_order" : true,
        "collect_payloads" : false
    }
}
Run Code Online (Sandbox Code Playgroud)
2)另一种方法是使用高级脚本,看看@Andrei Stefan对此问题的回答,他使用_POSITIONSwithmatch_phrase来按顺序返回结果。
希望这可以帮助!
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1269 次  |  
        
|   最近记录:  |