Php Zend Lucene索引/返回大数据集上的交叉引用零件结果

Php Zend Lucene索引/返回大数据集上的交叉引用零件结果,php,mysql,zend-framework,lucene,zend-search-lucene,Php,Mysql,Zend Framework,Lucene,Zend Search Lucene,我们有一个“交叉引用”模块,我正试图将其构建到Zend-Lucene搜索索引中,但存在主要性能问题。尝试了这十种不同的方法,结果要么是零/差,要么是超精确和极慢的性能。下面描述的当前解决方案可以得到准确的结果,但在我们相当大的数据集上速度非常慢 本质上,让我们假设我们有ACME零件号ABC123和一些其他零件号。由ACME制造,由沃尔玛、好市多和Target分销。这三家商店中的每一家都有自己的零件号,它们在其网站上应用于产品。下表是一个非常清楚的示例: 因此,我们希望看到的是,当用户搜索“Ta

我们有一个“交叉引用”模块,我正试图将其构建到Zend-Lucene搜索索引中,但存在主要性能问题。尝试了这十种不同的方法,结果要么是零/差,要么是超精确和极慢的性能。下面描述的当前解决方案可以得到准确的结果,但在我们相当大的数据集上速度非常慢

本质上,让我们假设我们有ACME零件号ABC123和一些其他零件号。由ACME制造,由沃尔玛、好市多和Target分销。这三家商店中的每一家都有自己的零件号,它们在其网站上应用于产品。下表是一个非常清楚的示例:

因此,我们希望看到的是,当用户搜索“Target 1009936”时,将返回ACME零件#ABC123的大小写。当我搜索“沃尔玛WM0002353CS”时,会返回ACME零件的箱子尺寸#DEF567。等等

事实上,一些批发商/分销商在其编号系统中使用计量单位,而一些批发商/分销商不使用计量单位,这与此无关。与此相关的是让Lucene快速索引和检索数据,而对于我们拥有200多万个产品SKU的数据库来说,目前情况并非如此

为了实现这一点,我们所做的是为每个批发商添加一个索引字段,其中存在该商品的交叉引用数据(让我们只调用字段crosstar、crosswal和crosscostco)。因此,在本例中,我们有所有批发商的交叉引用数据,但实际上我们只有一些批发商的交叉引用数据(但是有很多…数以百万计的交叉引用)。因此,在本例中,如果我将$hit->crosstar/crosswal/crosscostco值上的日志保存到日志文件中,我们将看到:

=>10001123
crosstar: 1009936
crosswal: WM0001256CS
crosscostco: CC5991243CA
crosstarfull: Target 1009936
crosswalfull: WalMart WM0001256CS
crosscostcofull: CostCo CC5991243CA
我们正在为零件和单独的批发商名称+零件编制索引(我们业务中的许多人实际上是这样搜索的-我知道这听起来很疯狂),这就是为什么sku/主键下有六个字段,而不是三个字段的原因

问题是,数据被标记化和索引的方式,因为批发商的名字在每个索引值之间造成了太多的相似性,这导致Lucene在查找记录时付出了更大的努力和更长的时间这就像是大脑超负荷,伙计


我充其量只是一个平庸的开发人员,我无法弄明白这一点,这一事实就很好地证明了这一点。有人对如何修改此场景以产生预期的结果有什么建议吗?

我说的是服装设计!我说的是服装设计!