gpt4 book ai didi

indexing - Lucene多语言分析器/索引方法

转载 作者:行者123 更新时间:2023-12-02 08:03:16 25 4
gpt4 key购买 nike

我有一个支持建议服务的工作 Lucene 索引。当用户在搜索框中键入内容时,它会通过 SUGGESTION_FIELD 查询索引。 SUGGESTION_FIELD 中的每个条目可以是多种支持的语言之一,并且每个条目都使用适当的语言特定分析器进行存储。为了知道使用了什么分析器,每个条目都有第二个字段,用于存储区域设置。因此,在查询期间,我可以说类似下面的代码,以使用适当的分析器执行特定于语言的查询

QueryParser parser = new QueryParser(Version.LUCENE_33, SUGGESTION_FIELD, getLangaugeAnalyzer(locale));
return searcher.search(parser.parse("SUGGESTION_FIELD:" + queryString + " AND LOCALE:"
+ locale), 100);

可行......但现在客户希望能够同时使用多种语言进行搜索。

我的问题:考虑到建议服务需要非常快,最快的查询解决方案是什么?...

Solr 。 #1.最简单的解决方案似乎是;多次执行查询。每个语言环境一次,从而每次应用相应的语言分析器。最后以某种合理的方式附加每个查询的结果

Solr 。 #2.或者,我可以使用每个区域设置的列重新索引,这样:

SUGGESTION_FIELD_en, SUGGESTION_FIELD_fr, SUGGESTION_FIELD_es etc.. 

对每个字段使用不同的分析器(使用 PerFieldAnalyzerWrapper),然后使用更复杂的查询字符串进行查询,例如:

"SUGGESTION_FIELD_en:" + queryString + " AND SUGGESTION_FIELD_fr:" + queryString + " AND SUGGESTION_FIELD_es:" + queryString

如果您认为可以,请帮忙:)

最佳答案

您的查询将如下所示: (sugField:queryString1 AND locale:loc1) OR (sugField:queryString2 AND locale:loc2) OR .... 这是一个顶级 BooleanQuery,其中添加了从属 BooleanQueries =应该,其中每个从属查询都有其出现的条件=必须。 queryString1、queryString2 等是具有相同输入(用户输入的字符串)的不同语言分析器的输出。

每个从属查询都涉及索引中很少见的强制术语(来自查询字符串),Lucene 从一开始就知道这一点(它知道索引中每个术语的总文档计数),因此它首先会通过以下方式约束结果: queryString,然后另外将其与语言环境术语相交。无论您的索引有多大,这都将非常有效。

对于不同的分析器,我建议您不要使用QueryParser,而是以编程方式创建整个查询。每当您不手动输入查询时,这是一个很好的一般建议,并且在您的情况下,这是获得分析方面控制的唯一方法。通过每个特定于语言的分析器运行查询字符串,并将其输出标记作为 TermQueries 添加到从属 BooleanQueries。

关于indexing - Lucene多语言分析器/索引方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9993563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com