Lucene和Multifield查询

时间:2013-12-10 22:34:46

标签: java search lucene search-engine

我在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个索引文件),我想在其他领域找到它们。

你认为查询做得好吗?查询可以改进吗?怎么样?像谷歌这样的搜索引擎如何在多字段搜索中运行?

有一种更好的方式来处理多语言领域吗?

谢谢, 海王星。

1 个答案:

答案 0 :(得分:1)

除非您同时拥有所有文档的翻译,否则我将创建2个索引 - 每种语言使用1个索引,每个索引使用相同的字段名称。然后,您将使用MultiReader和搜索查询。

这种方法的问题是每种语言的拼写相同,但英语和意大利语之间的含义不同。除了这些话,我认为这种架构更容易理解,也更容易解释结果。