Article freyasx/13 of [1-99] on the server localhost:7119
  upper oldest olders older1 this newer1 newers latest
search
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
[Reference:<_A12@freyasx.ML_>]
Newsgroups: mail-lists.freyasx

[FreyaSX] なんちゃって機能拡張 -- ワイルドカード機能
04 Aug 2004 09:26:37 GMT ysato@delegate.org (Yutaka Sato)
The DeleGate Project

0.98 では性能と拡張性の向上ということで大幅な改造を断行!したので
かなり疲れました。ちょっと骨休めという感じで、何か新しい機能でも
ちょろっとつけてみようかと思いまして、以前から欲しいと思っていた
ワイルドカード機能を入れてみました。

とりあえず、任意の一語を表すのに "*" を使う事にします。これにより、

  link:www.*.org

とか、

  "もし * なら"

みたいな感じで検索できます。

実装は同封のパッチのようなものです。単に無条件に適合したものとして、
次の語のマッチングに進むというだけです。
ここで、0.98.0 でやった変更「語の出現位置をオリジナルのようにバイト
オフセットでなく語の出現順番号で表すようにした」が生きました。
オリジナルFreyaの場合にこれを実現するのは、ちょっと難しかったのでは
と思います。

「任意の長さの任意の語」を導入するのは少しだけ難しいとは思いますが、
基本的には「次のワイルドカードでない語を検索して、その出現位置番号
が前の語より大きい」かどうかを判定すればOKだと思います。

                   D G  
┌─┐┬┌──┬┐ //\^^ ( - ); {Do the more with the less -- B. Fuller}
├─┤│└─┐│ / 877m\_<   >_ <URL:http://www.delegate.org/delegate/>
┴ └┴──┘┴──────────────────────────────
佐藤豊@情報技術研究部門.産業技術総合研究所(独立行政法人)

*** ../../freyasx-0.98.1/freya/src/Retriever.cc	Sun Aug  1 17:49:52 2004
--- Retriever.cc	Wed Aug  4 18:07:19 2004
***************
*** 128,133 ****
--- 128,138 ----
                          int nkeys, int &resultLen, int isprefixsearch){
      pos_t *list = NULL;
      for(int k = 0; k < nkeys; k++){
+         if(strcmp(keys[k],"*") == 0){
+             // wild card
+             continue;
+         }
+ 
          pos_t *tmplist;
          int tmplistLen;
  

  admin search upper oldest olders older1 this newer1 newers latest
[Top/Up] [oldest] - [Older+chunk] - [Newer+chunk] - [newest + Check]
@_@V