全部,请原谅我,我刚刚开始学习如何使用SOLR
。强大的SE。
我已经知道Inverted Index
是SOLR
中搜索速度如此之快的原因Solr in action
。在许多阅读。与Apache Solr search pattern
,Document
一样。倒转索引如下所述。
我也知道Fields
由module enter_password(
input wire clk, reset,
input wire ps2d, ps2c, rx_en,
output wire [6:0] seven_seg_display,
output wire assert_seg);
wire [7:0] scan_out;
wire [7:0] ascii_code;
//initial seven_seg_display = 7'b0000000;
assign assert_seg = 1'b1;
// instantiate ps2 receiver
ps2_rx ps2_rx_unit(
.clk(clk), .reset(reset), .rx_en(1'b1),
.ps2d(ps2d), .ps2c(ps2c),
.rx_done_tick(scan_done_tick), .dout(scan_out));
// instantiate key-to-ascii code conversion circuit
Scan_to_ascii key2ascii(.key_code(scan_out), .ascii_code(ascii_code));
assign seven_seg_display =
ascii_code == 8'h30 ? 7'b0000001: //0
ascii_code == 8'h31 ? 7'b1001111: //1
ascii_code == 8'h32 ? 7'b0010010: //2
ascii_code == 8'h33 ? 7'b0000110: //3
ascii_code == 8'h34 ? 7'b1001100: //4
ascii_code == 8'h35 ? 7'b0100100: //5
ascii_code == 8'h36 ? 7'b0100000: //6
ascii_code == 8'h37 ? 7'b0001111: //7
ascii_code == 8'h38 ? 7'b0000000: //8
ascii_code == 8'h39 ? 7'b0000100: //9
7'b1111111; //e for error 0
endmodule
组成。
在我对上述数据结构的理解中。使用像“哈利”这样的特定术语进行搜索时。 SE将返回结果文档1,2。我毫不怀疑。
但是当我读到guide from apache时。它说
分析在两种情况下进行。在索引时,当一个字段是 正在创建,添加分析产生的令牌流 索引并定义术语集(包括位置,大小和 等等)对于该领域。在查询时,搜索的值是 分析并将结果与那些相匹配的术语进行匹配 存储在字段的索引中。
我对此阅读感到困惑。
倒排索引是否指向文档或字段? 在我提到的图中。它没有提到任何关于领域的事情。它只是说索引指向文档ID。 但在阅读中我引用了。它确实告诉我们倒排索引指向不是文档的字段。 (如果我错了。请纠正我。) 感谢。
答案 0 :(得分:2)
我理解你的困惑,这是文献解释手头主题过度简化的案例之一。大多数文献使用仅仅是文本的文档来解释和反向索引,因此(如图所示)一个文档只是一个字符序列,而没有其他字段"存在。
当您解释反向索引是什么时,这很有用,但是当您与实际实现(如Lucene / ES / Solr提供的实现)交互时,实际情况会有所不同。
也许this post可能有用,如果你一直走下去,阅读会有点密集,但是如果你只是想要掌握要领并且不要试图理解一切中的一切。作为建议,Lucene实现包含更多技术细节,例如,以确保性能和减少磁盘使用。
底线是,基本上每个字段都像一个"迷你倒排索引"本身,并允许知道在哪个特定的"部分/字段"您的文档与您的查询匹配发生,因此您可以相应地影响您的分数(通常是如何订购结果)。如果你总是有平面文件,搜索引擎就不会那么有用了。
答案 1 :(得分:0)
我可能理解你的困惑,如果你想理解solr搜索,索引,分析,我认为你必须先学习lucene。为什么?因为solr是基于lucene,这是一个lucene维基网址,有用它可以帮助你! lucene wiki
答案 2 :(得分:0)
让我们使用您上面提到的例子。我们有2个文档:
Doc1: Harry Potter And The Half Blood Prince
Doc2: Harry Potter And The Deathly Hallows
构建倒排索引
第1步 - 我们需要使用tokenizer将这些文档标记为术语。 所以,让我们说,我们使用Tokenizer A并得到以下结果:
Doc1:Harry
,Potter
,And
,The
,Half
,Blood
,Prince
Doc2:Harry
,Potter
,And
,The
,Deathly
,Hallows
第2步 - 构建倒排索引
Harry
- > Doc1,Doc2
Potter
- > Doc1,Doc2
And
- > Doc1,Doc2
The
- > Doc1,Doc2
Half
- > DOC1
Blood
- > DOC1
Prince
- > DOC1
Deathly
- > DOC2
Hallows
- > DOC2
查询/搜索
第1步 - 我们还需要首先标记搜索词
例如,我们的搜索词是Harry Potter
。你有两个
tokenizer可供选择。 Tokenizer A与我们使用的那个相同
索引,将我们的单词标记为两个术语:Harry
和
Potter
。但Tokenzier B可以将它们标记为Harry
Potter
。
第2步 - 执行查询
如果您选择Tokenizer A,则会获得Harry
和Potter
,这两者都在我们的倒排索引中,然后您就可以获得搜索结果:Doc1和Doc2。
但是如果你选择Tokenizer B,你得到的术语Harry Potter
不在我们的倒排索引中,这意味着你无法从倒排索引中检索任何结果。
结论:Solr / Lucene中的所有索引和搜索都是 基于条款。您可以选择不同的标记器/过滤器或 在索引或搜索过程中将它们组合在一起,您就会得到 不同的术语输出。请参考这个 http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters/。 它可以帮助您设计您的solr取决于您的具体 要求。
答案 3 :(得分:0)
在第一次近似中,反向索引只是有序(从法律到高度)文档ID数组。当您搜索多个术语时,它允许快速交叉和文档ID联合。为了提供更快的交叉,甚至比线性时序,它包含skip pointers,您可以在书Introduction to Information Retrieval中阅读它。本书很好地介绍了一般搜索引擎的工作原理。为了减少光盘操作和索引大小的i / o,使用了一些压缩机制,你也可以在本书中阅读introduction to them。