Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lucene.Net文档中的字段分组_Lucene.net_Lucene - Fatal编程技术网

Lucene.Net文档中的字段分组

Lucene.Net文档中的字段分组,lucene.net,lucene,Lucene.net,Lucene,在我们的应用程序中,我们一直在与Lucene.Net合作,为大量数据编制索引。字段本身是可配置的,因此字段的名称和类型可以随每次重建而更改。在每个文档中,我们可以有多个具有相同名称的字段以及不同数量的数字和文本字段。因为我们在当前的开发中投入了大量的工作,所以改变搜索引擎是不可能的 事实是,在大多数情况下,它是一种魅力,但我们确实有一个我们似乎无法克服的困难 假设我们要为包含以下内容的文档“X”编制索引: A行-字段1:4+字段2:A B行-字段1:8+字段2:B 我们将创建的索引将包含4个字段

在我们的应用程序中,我们一直在与Lucene.Net合作,为大量数据编制索引。字段本身是可配置的,因此字段的名称和类型可以随每次重建而更改。在每个文档中,我们可以有多个具有相同名称的字段以及不同数量的数字和文本字段。因为我们在当前的开发中投入了大量的工作,所以改变搜索引擎是不可能的

事实是,在大多数情况下,它是一种魅力,但我们确实有一个我们似乎无法克服的困难

假设我们要为包含以下内容的文档“X”编制索引:

A行-字段1:4+字段2:A
B行-字段1:8+字段2:B

我们将创建的索引将包含4个字段:

  • 文件十:
    • 字段1:4(数字)
    • 字段2:a(文本)
    • 字段1:8(数字)
    • 字段2:b(文本)
(行ID不重要)

搜索字段1:[3到6]和字段2:b会对该文档产生影响。
但是,由行表示的字段之间的链接(链接4和“a”)消失了

我们可以像4_a那样连接这些值,但这会破坏我们的数字搜索,并要求客户端知道连接哪些字段以获得正确的结果。这也会增加分析器的难度,因为对于每个字段,我们可以添加不同的分析器(主要用于语言目的)

此外,我们可以使用相同的键为每一行创建一个单独的文档,并在搜索结果中添加一个distinct,但这听起来不像是一种方法,不是吗?这将严重增加文档的数量,因为我们将为现在创建的每个文档创建20-100个文档。我还没有在性能或可用性方面进行测试,因为当前的实现不允许我很容易地进行测试:-)


有人知道我如何在Lucene.Net中的某些字段之间强制建立链接,但仍然可以单独搜索每个字段吗

我个人不明白为什么增加文档数量会影响性能。至少在Lucene的Java版本中,大部分内存用于术语缓存——这是每个术语的缓存,与文档计数无关(前提是术语计数不变)。无法详细说明可用性,因为这是特定于您的应用程序的


要点是,一旦将行分组到文档中,就会丢失行关系信息。您可以通过添加额外的字段(如
rowInfoA:4_a
rowInfoB:8_b
)来解决这个问题,但这看起来太麻烦了,实际上需要更多的内存。是的,您可以选择不编制索引,而只存储这些辅助字段,但我(提供了信息)仍然更喜欢1:1行:文档映射。

一个难题是为链接添加另一个字段:

  • 文件十:

    • 字段1:4(数字)
    • 字段2:a(文本)
    • 字段1:8(数字)
    • 字段2:b(文本)
    • 链接:4_a
    • 链接:8_b

另一个难题是添加一个类似于
MyDocument:X
的字段,并分别为每一行编制索引,每一行包含其文档的
MyDocument
字段。这将使您在以后的过程中按文档进行筛选。

我发现很难从问题的措辞中理解您实际搜索的内容。您是在查找单个行还是行的集合?请记住,Lucene不是一个关系数据库,试图让它表现得像一个关系数据库通常不是一个好主意。