如何在vespa中进行预搜索?

时间:2019-02-22 11:27:56

标签: vespa

我正在尝试使用vespa建立预输入搜索。由于数据很多,所以我不想使用流模式。我期望看到通配符搜索,但是它似乎仅限于流模式(正则表达式和match:substring仅适用于流模式)。任何有关如何实现或定制的指示将不胜感激。

1 个答案:

答案 0 :(得分:3)

我所见过的应用程序为此所做的工作如下:

  1. 将所有文本放在属性数组中,并在该数组上设置快速搜索。由于仅访问内存,因此可以始终保持非常低的延迟,并且可以使用前缀匹配。它会禁用全文本相关性,但您不需要这样做。

  2. 使用前缀匹配,而不是子字符串。如果要按前缀匹配所有术语,则只需在搜索定义中的字段上设置match:前缀。不过,仅进行最后一项的前缀匹配可能会带来更好的用户体验。在这种情况下,请保持默认匹配并重写查询(在“搜索器”中)以代替最后一个WordItem和PrefixItem。

例如,您可以像这样在搜索定义中定义字段:

       Flowable.interval(0, 5, TimeUnit.SECONDS)
                    .observeOn(AndroidSchedulers.mainThread())
                    .map { LocalDateTime.now() }
                    .distinctUntilChanged { old, new ->
                        old.minute == new.minute
                    }
                    .subscribe {
                        setDateTime(it)
                    }

要在最后一项上进行前缀匹配,请添加一个Searcher component,其功能如下:

field suggestions type array<string> {
    indexing: input myinputtextfield |split "\\s+" | summary | attribute
    attribute: fast-search
}