我在Lucene(Java版本)上有一个大学论文和出版物的归档(具有BM25相似性)。我有英文文档和意大利文档,因此我有重复的字段,如:pdf,pdf_en或类似:titolo,titolo_en。当我有意大利文件时,我填写意大利语字段,否则我填写英语文件。
现在我有一个带有MultiFieldQueryParser的BooleanQuery,这是我的代码:
String[] fieldsGEN={"url","autori","lingua","settore","pdfurl"};
String[] fieldsITA={"titolo","tipologia","abstract","pdf"};
String[] fieldsENG={"titolo_en","tipologia_en", "abstract_en","pdf_en"};
MultiFieldQueryParser parserGEN = new MultiFieldQueryParser(version, fieldsGEN, analyzerIT);
MultiFieldQueryParser parserITA = new MultiFieldQueryParser(version, fieldsITA, analyzerIT);
MultiFieldQueryParser parserENG = new MultiFieldQueryParser(version, fieldsENG, analyzerENG);
parserITA.setDefaultOperator(QueryParser.Operator.OR);
parserITA.setDefaultOperator(QueryParser.Operator.OR);
parserENG.setDefaultOperator(QueryParser.Operator.OR);
Query query4 =parserGEN.parse(ricerca.ricerca);
bq.add(query4, Occur.SHOULD);
Query query2 =parserITA.parse(ricerca.ricerca);
bq.add(query2, Occur.SHOULD);
Query query3 =parserENG.parse(ricerca.ricerca);
bq.add(query3, Occur.SHOULD);
如果我搜索“anna”(作者姓名),则3查询为:
Query: [titolo:anna tipologia:anna abstract:anna pdf:anna]
Query: [titolo_en:anna tipologia_en:anna abstract_en:anna pdf_en:anna]
Query: [url:anna autori:anna lingua:anna settore:anna pdfurl:anna]
我也是没有名字anna的作者,即使他们处于最后一个位置(大约3个21的1000个索引文件),我想在其他领域找到它们。
你认为查询做得好吗?查询可以改进吗?怎么样?像谷歌这样的搜索引擎如何在多字段搜索中运行?
有一种更好的方式来处理多语言领域吗?
谢谢, 海王星。
答案 0 :(得分:1)
除非您同时拥有所有文档的翻译,否则我将创建2个索引 - 每种语言使用1个索引,每个索引使用相同的字段名称。然后,您将使用MultiReader和搜索查询。
这种方法的问题是每种语言的拼写相同,但英语和意大利语之间的含义不同。除了这些话,我认为这种架构更容易理解,也更容易解释结果。