相关疑难解决方法(0)

如何明智地结合带状疱疹和edgeNgram来提供灵活的全文搜索?

我们有一个符合OData的API,它将一些全文搜索需求委托给Elasticsearch集群.由于OData表达式可能变得非常复杂,我们决定将它们简单地转换为等效的Lucene查询语法并将其提供给query_string查询.

我们支持一些与文本相关的OData过滤器表达式,例如:

  • startswith(field,'bla')
  • endswith(field,'bla')
  • substringof('bla',field)
  • name eq 'bla'

我们对匹配字段可以是analyzed,not_analyzed或两者(通过多场IE).所搜索的文本可以是一个单一的令牌(例如table),只有其(例如一部分tab),或数个标记(例如table 1.,table 10等).搜索必须不区分大小写.

以下是我们需要支持的行为的一些示例:

  • startswith(name,'table 1')必须匹配" 表1 "," 表1 00"," 表1 .5"," 表1 12上层"
  • endswith(name,'table 1')必须匹配"房间1,表1 ","子表1 "," 表1 ","杰夫表1 "
  • substringof('table 1',name)必须匹配"Big Table 1 back"," table 1 "," Table 1 ","Small Table1 2"
  • name eq 'table 1'必须匹配" 表1 "," 表1 "," 表1 "

所以基本上,我们接受用户输入(即传递给startswith/ 的第二个参数的内容endswith,或者相应的第一个参数substringof …

regex lucene analyzer odata elasticsearch

4
推荐指数
1
解决办法
2364
查看次数

标签 统计

analyzer ×1

elasticsearch ×1

lucene ×1

odata ×1

regex ×1