Differences between revisions 2 and 4 (spanning 2 versions)
Revision 2 as of 2007-01-28 08:25:19
Size: 1471
Editor: wangzhen
Comment:
Revision 4 as of 2007-01-28 08:37:04
Size: 2142
Editor: wangzhen
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
       Xapian的使用并不方便,最起码没有PyLucene那样方便。它没有Field的概念,如果要把数据库里的内容都用Xapian建立索引并搜索,并不是很方便。 Xapian的Document相当于一条记录,但是它能存储的信息只有value,term,posting和data Xapian的使用并不方便,最起码没有PyLucene那样方便。它没有Field的概念,如果要把数据库里的内容都用Xapian建立索引并搜索,并不是很方便。 Xapian的Document相当于一条记录,但是它能存储的信息只有value,term,posting和data
Line 4: Line 4:
       term是一个关键词,字符串。被索引. 一个Document中可以有0到多个term  . term是一个关键词,字符串。被索引. 一个Document中可以有0到多个term
 . posting是一个带有位置信息的term,首先它是一个字符串,被索引,同时它还带有一个表示这个term在全文中的位置的数字。一个Document可以有0到多个posting
 . value是一个字符中值,不被索引,但是被保存.可以做为搜索结果排序的条件。一个Document可以有0到多个value,每个value都有一个valueno序号。 data是一个被存储的数据,不被索引,也不能做排序条件。一个Document只能有一个data
如果一个数据库的表中有3个char字段,并且每个字段都要建立索引,而搜索的时候可能并不是每个字段都参于条件。 例如:
Line 6: Line 9:
       posting是一个带有位置信息的term,首先它是一个字符串,被索引,同时它还带有一个表示这个term在全文中的位置的数字。一个Document可以有0到多个posting  . select * from table1 where field1 like '%hello%' and field2 like '%world%'
这样的查询在xapian中比较难处理。 xapian解决这个问题的方法就是使用prefix,就是在每个term前加一个前缀,例如:FIELD1hello,在建立索引和搜索时,都加上这个前缀,就可以了。 这样做还是比较麻烦的。
Line 8: Line 12:
       value是一个字符中值,不被索引,但是被保存.可以做为搜索结果排序的条件。一个Document可以有0到多个value,每个value都有一个valueno序号。

       data是一个被存储的数据,不被索引,也不能做排序条件。一个Document只能有一个data

       如果一个数据库的表中有3个char字段,并且每个字段都要建立索引,而搜索的时候可能并不是每个字段都参于条件。

       例如: select * from table1 where field1 like '%hello%' and field2 like '%world%' 这样的查询在xapian中比较难处理。

       xapian解决这个问题的方法就是使用prefix,就是在每个term前加一个前缀,例如:FIELD1hello,在建立索引和搜索时,都加上这个前缀,就可以了。 这样做还是比较麻烦的。
== Xapwrap ==
想把PyLucene里的一些东西拿来处理关键词,然后再用Xapian索引和搜索。与是想去借鉴lupy的代码,与是在lupy的网站上发现了Xapwrap.
Xapwrap内部使用Xapain,同时在高层次上对数据做预处理,然后再调用Xapian进行索引和搜索。原来我需要的东西人家已经做好了。于是下载了Xapwrap,一个包,两个模块。代码不多,都是py的代码,于是研读学习之。收获不小。
Xapwrap中有了Field的概念,它会自动处理给term添加前缀。然后简化了很多操作。同时还处理了一些utf-8和unicode的转换(utf-8是可变的),现在要把数据库中的表建索引,就容易多了。。。

关键词前缀

Xapian的使用并不方便,最起码没有PyLucene那样方便。它没有Field的概念,如果要把数据库里的内容都用Xapian建立索引并搜索,并不是很方便。 Xapian的Document相当于一条记录,但是它能存储的信息只有value,term,posting和data

  • term是一个关键词,字符串。被索引. 一个Document中可以有0到多个term
  • posting是一个带有位置信息的term,首先它是一个字符串,被索引,同时它还带有一个表示这个term在全文中的位置的数字。一个Document可以有0到多个posting
  • value是一个字符中值,不被索引,但是被保存.可以做为搜索结果排序的条件。一个Document可以有0到多个value,每个value都有一个valueno序号。 data是一个被存储的数据,不被索引,也不能做排序条件。一个Document只能有一个data

如果一个数据库的表中有3个char字段,并且每个字段都要建立索引,而搜索的时候可能并不是每个字段都参于条件。 例如:

  • select * from table1 where field1 like '%hello%' and field2 like '%world%'

这样的查询在xapian中比较难处理。 xapian解决这个问题的方法就是使用prefix,就是在每个term前加一个前缀,例如:FIELD1hello,在建立索引和搜索时,都加上这个前缀,就可以了。 这样做还是比较麻烦的。

Xapwrap

想把PyLucene里的一些东西拿来处理关键词,然后再用Xapian索引和搜索。与是想去借鉴lupy的代码,与是在lupy的网站上发现了Xapwrap. Xapwrap内部使用Xapain,同时在高层次上对数据做预处理,然后再调用Xapian进行索引和搜索。原来我需要的东西人家已经做好了。于是下载了Xapwrap,一个包,两个模块。代码不多,都是py的代码,于是研读学习之。收获不小。 Xapwrap中有了Field的概念,它会自动处理给term添加前缀。然后简化了很多操作。同时还处理了一些utf-8和unicode的转换(utf-8是可变的),现在要把数据库中的表建索引,就容易多了。。。

Xapwrap (last edited 2009-12-25 07:10:22 by localhost)