2

記事の多い雑誌を提供する iOS アプリの検索アルゴリズムを改善しようとしています。そのために、Micheal Papp の S4LuceneLibrary ( git repo ) を使用しました。これは、Apache Lucene のフル機能のテキスト検索エンジン ライブラリに相当する iOS です。問題は、現在の検索が非常に一貫性がないことです...つまり、特定の単語の後の検索に非常に時間がかかる場合とそうでない場合があります。

これは、私が検索していた単語のリストと、検索にかかった時間です。

  • ベルリン (34 ヒット) -> 3,5 秒
  • タグ (29 ヒット) -> 8,3 秒
  • ハウス (3 ヒット) -> 3,6 秒
  • Straße (28 ヒット) -> 8 秒
  • Raumfahrt (5 ヒット) -> 6,2 秒
  • アストロノミー (9 ヒット) -> 1 秒

そのため、結果は多少異なりますが、すべての検索フレーズに対して同じ時間がかかるはずだと思いました. どこが違うか分かりますか?

前もって感謝します :)

4

2 に答える 2

0

さて、テスト用に 6 つの雑誌があり、それぞれに独自のインデックスがあります。したがって、インデックスのサイズは次のとおりです。

434kb、41kb、139kb、434kb、57kb、57kb

インデックス作成のための私のコードは次のとおりです。

LCSimpleAnalyzer *analyzer = [[LCSimpleAnalyzeralloc] init];
    LCIndexWriter *writer = [[LCIndexWriteralloc] initWithDirectory:[selfcreateFileDirectoryWithEmagPath:emagModel.emagPath] analyzer: analyzer create: YES];

...
// creating searchResult
...

// adding relevant information to lucene document
LCDocument *doc = [[LCDocumentalloc] init];

LCField *fieldContent = [[LCFieldalloc] initWithName: @"content_to_search"string:bodyText store:LCStore_YES index:LCIndex_Tokenized];   
LCField *fieldResult = [[LCFieldalloc] initWithName:@"data" data: [NSKeyedArchiverarchivedDataWithRootObject:result] store:LCStore_YES];

[doc addField:fieldContent];
[doc addField:fieldResult];  

[writer addDocument:doc];

...
// releasing stuff and close writer

これが検索用のコードです。

// search
LCIndexSearcher *searcher = [[LCIndexSearcheralloc] initWithDirectory: [selfgetFileDirectoryOfEmagPath:emagPath]];
LCTerm *term = [[LCTermalloc] initWithField: @"content_to_search" text: self.searchText];
LCTermQuery *termQuery = [[LCTermQueryalloc] initWithTerm:term];

LCHits *hits = [searcher search:termQuery];

どうも

于 2012-07-19T14:39:18.583 に答える
0

うわー、それらのベンチマーク!インデックス/コレクションの大きさは?

ここでは、プログラムでインデックスを検索していると思いますか? (独自の不具合がある可能性のある複雑な実装/UI 経由ではありません)

私の最初の呼び出しは、最初にコレクションを適切にインデックス化することです。特に: 各ドキュメントに入れるフィールドのコンストラクターを確認してください。コンストラクターのいくつかの形式は、'store' と 'index' にブール値を取ります: 必ずそれを渡してください:このコンテキストstore.yesindex.yesは、そうでなければそれらはそこにあり、取得できますが、lucene の逆インデックスを介してではありません。ツール全体。

ただし、コレクションのサイズがおそらく変わらないことを考えると、その場合、検索時間が劇的に異なるのは奇妙です。

インデックスに入力/クエリを実行する方法を教えてください。

于 2012-07-19T11:29:58.667 に答える