New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

検索結果が多すぎる場合 #58

Closed
kazuna opened this Issue Feb 20, 2014 · 8 comments

Comments

Projects
None yet
2 participants
@kazuna

kazuna commented Feb 20, 2014

検索した結果が多すぎるとこのエラーが出るみたいなのですが、いくつぐらいまでなら大丈夫なのでしょうか?

それからgrepなどを代わりに使えと出ますがうまく動かないようなのですが、何が問題なのでしょうか?

$>gmilk -a NULL
Number of records is large. Use auto external tool (gmilk -e grep)
C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:262:in `exist?': can't convert nil into String (Type Error)
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:262:in `block in pickup_files'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:261:in `each'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:261:in `pickup_files'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:231:in `search_external_tool'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:215:in `execute'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/bin/gmilk:10:in `<top (required)>'
        from C:/Ruby/bin/gmilk:23:in `load'
        from C:/Ruby/bin/gmilk:23:in `<main>'

$>gmilk -e grep -a NULL
C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:262:in `exist?': can't convert nil into String (Type Error)
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:262:in `block in pickup_files'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:261:in `each'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:261:in `pickup_files'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:231:in `search_external_tool'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:169:in `execute'
        from C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/bin/gmilk:10:in `<top (required)>'
        from C:/Ruby/bin/gmilk:23:in `load'
        from C:/Ruby/bin/gmilk:23:in `<main>'
@ongaeshi

This comment has been minimized.

Show comment
Hide comment
@ongaeshi

ongaeshi Feb 21, 2014

Owner

報告ありがとうございます。
エラーメッセージを一部整形させてもらいました。

Number of .. はマッチしたレコードが多い時にgrep等を使って高速に検索する機能です。gmilk -e grep するとマッチしたレコードが少なくてもgrepを使って検索します。上記エラーメッセージを見る感じ、その部分は正しく動いている印象です。
※ そもそもgrepやxargsの無い環境だと上記機能は起動しません。

検索結果の制限はMilkode側ではかけているつもりは無いのですが、内部で使っているライブラリやリソース不足で何か起きているのかもしれません。

$ gmilk -a NULL -c

だとどのような結果が出ますか?

Owner

ongaeshi commented Feb 21, 2014

報告ありがとうございます。
エラーメッセージを一部整形させてもらいました。

Number of .. はマッチしたレコードが多い時にgrep等を使って高速に検索する機能です。gmilk -e grep するとマッチしたレコードが少なくてもgrepを使って検索します。上記エラーメッセージを見る感じ、その部分は正しく動いている印象です。
※ そもそもgrepやxargsの無い環境だと上記機能は起動しません。

検索結果の制限はMilkode側ではかけているつもりは無いのですが、内部で使っているライブラリやリソース不足で何か起きているのかもしれません。

$ gmilk -a NULL -c

だとどのような結果が出ますか?

@ongaeshi

This comment has been minimized.

Show comment
Hide comment
@ongaeshi

ongaeshi Feb 21, 2014

Owner

Number of ..の英文が変だったので変更しておきます。

Owner

ongaeshi commented Feb 21, 2014

Number of ..の英文が変だったので変更しておきます。

@kazuna

This comment has been minimized.

Show comment
Hide comment
@kazuna

kazuna Feb 21, 2014

色々と試したところ、rebuildをかけると前述のcli_grep.rb:262のエラーが出なくなりましたが、相変わらず検索結果が多いと結果が表示されないようです。

とくに'-e grep'と指定しても'xargs'を使用しようとしているように見受けられます。

また質問ですが、"Number of ..."の場合でも強制的に外部プログラムを使わずに検索することは出来ないのでしょうか?

$>gmilk -a NULL
Number of records is large. Use auto external tool (gmilk -e grep)
'xargs' is not recognized as an internal or external command,
operable program or batch file.

$>gmilk -a NULL -c
7518 records

$>copy \Windows\System32\findstr.exe grep.exe
1 file(s) copied.

$>gmilk -e grep -a NULL
'xargs' is not recognized as an internal or external command,
operable program or batch file.

$>copy grep.exe xargs.exe
1 file(s) copied.

$>gmilk -e grep -a NULL
FINDSTR: Cannot open -n
FINDSTR: Cannot open NULL

kazuna commented Feb 21, 2014

色々と試したところ、rebuildをかけると前述のcli_grep.rb:262のエラーが出なくなりましたが、相変わらず検索結果が多いと結果が表示されないようです。

とくに'-e grep'と指定しても'xargs'を使用しようとしているように見受けられます。

また質問ですが、"Number of ..."の場合でも強制的に外部プログラムを使わずに検索することは出来ないのでしょうか?

$>gmilk -a NULL
Number of records is large. Use auto external tool (gmilk -e grep)
'xargs' is not recognized as an internal or external command,
operable program or batch file.

$>gmilk -a NULL -c
7518 records

$>copy \Windows\System32\findstr.exe grep.exe
1 file(s) copied.

$>gmilk -e grep -a NULL
'xargs' is not recognized as an internal or external command,
operable program or batch file.

$>copy grep.exe xargs.exe
1 file(s) copied.

$>gmilk -e grep -a NULL
FINDSTR: Cannot open -n
FINDSTR: Cannot open NULL

@ongaeshi

This comment has been minimized.

Show comment
Hide comment
@ongaeshi

ongaeshi Feb 22, 2014

Owner

rebuildされたことでデータベース周りのエラーは直ったけど、
次に外部プログラムを使ったエラーが出てしまっているみたいですね。
トラブルが多くてすいません。

本来はgrepやxargsが入っていない環境(素のWindowsなど)だと
外部プログラムの検索を行わないはずなのですが、その判定が上手くいっていないようです。
私のWindows環境だとCygwinが入っていたため上手く動いていました。

ダウンロードしたgem本体に手を入れるパッチ的な対処になりますが、

C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:212

              # レコード数が多い時は"-e grep"で検索
              if Util::exist_command?('cat') && Util::exist_command?('grep') && Util::exist_command?('xargs')
                $stderr.puts "Because number of records is large, Milkode use external tool. (Same as 'gmilk -e grep')"
                search_external_tool(arguments, option, records, 'grep -n', 'grep')
              else
                findGrep.searchAndPrint2(stdout, records)
              end

              # レコード数が多い時は"-e grep"で検索
              findGrep.searchAndPrint2(stdout, records)
              # if Util::exist_command?('cat') && Util::exist_command?('grep') && Util::exist_command?('xargs')
              #   $stderr.puts "Because number of records is large, Milkode use external tool. (Same as 'gmilk -e grep')"
              #   search_external_tool(arguments, option, records, 'grep -n', 'grep')
              # else
              #   findGrep.searchAndPrint2(stdout, records)
              # end

のように書き換えると、外部プログラムを使わずに検索出来るはずです。
次回更新までには何らかの対策をしておきます。

※ お使いの環境はCygwin等のUNIXツールが入っていないWindowsでしょうか?

Owner

ongaeshi commented Feb 22, 2014

rebuildされたことでデータベース周りのエラーは直ったけど、
次に外部プログラムを使ったエラーが出てしまっているみたいですね。
トラブルが多くてすいません。

本来はgrepやxargsが入っていない環境(素のWindowsなど)だと
外部プログラムの検索を行わないはずなのですが、その判定が上手くいっていないようです。
私のWindows環境だとCygwinが入っていたため上手く動いていました。

ダウンロードしたgem本体に手を入れるパッチ的な対処になりますが、

C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:212

              # レコード数が多い時は"-e grep"で検索
              if Util::exist_command?('cat') && Util::exist_command?('grep') && Util::exist_command?('xargs')
                $stderr.puts "Because number of records is large, Milkode use external tool. (Same as 'gmilk -e grep')"
                search_external_tool(arguments, option, records, 'grep -n', 'grep')
              else
                findGrep.searchAndPrint2(stdout, records)
              end

              # レコード数が多い時は"-e grep"で検索
              findGrep.searchAndPrint2(stdout, records)
              # if Util::exist_command?('cat') && Util::exist_command?('grep') && Util::exist_command?('xargs')
              #   $stderr.puts "Because number of records is large, Milkode use external tool. (Same as 'gmilk -e grep')"
              #   search_external_tool(arguments, option, records, 'grep -n', 'grep')
              # else
              #   findGrep.searchAndPrint2(stdout, records)
              # end

のように書き換えると、外部プログラムを使わずに検索出来るはずです。
次回更新までには何らかの対策をしておきます。

※ お使いの環境はCygwin等のUNIXツールが入っていないWindowsでしょうか?

@kazuna

This comment has been minimized.

Show comment
Hide comment
@kazuna

kazuna Feb 22, 2014

お察しの通りCygwin等を入れていない素のWindowsです。
対策を考慮していただきありがとうございます。

ところで結果が沢山あった場合に外部検索とは、何レコードくらいを沢山と定義しているのでしょうか?

kazuna commented Feb 22, 2014

お察しの通りCygwin等を入れていない素のWindowsです。
対策を考慮していただきありがとうございます。

ところで結果が沢山あった場合に外部検索とは、何レコードくらいを沢山と定義しているのでしょうか?

@ongaeshi

This comment has been minimized.

Show comment
Hide comment
@ongaeshi

ongaeshi Feb 22, 2014

Owner

現状だと500レコードがしきい値になっています。
以前マッチ数が多いと遅すぎる、という指摘を受けてこのような機能を付けた経緯があります。

Owner

ongaeshi commented Feb 22, 2014

現状だと500レコードがしきい値になっています。
以前マッチ数が多いと遅すぎる、という指摘を受けてこのような機能を付けた経緯があります。

ongaeshi added a commit that referenced this issue Apr 12, 2014

@ongaeshi

This comment has been minimized.

Show comment
Hide comment
@ongaeshi

ongaeshi Apr 12, 2014

Owner

de30315 にて修正しました。対応が遅くなりました。

素のWindowsでも外部プログラムの検索が出来るようになったので、
レコード数が多くても間違えてxargsを使うことはないはずです。

また、--no-externalを使うと強制的に外部プログラムの使用を抑制します。
これは1.5.0でも使えるはずです。

次回バージョンアップに反映される予定です。
報告ありがとうございました。

Owner

ongaeshi commented Apr 12, 2014

de30315 にて修正しました。対応が遅くなりました。

素のWindowsでも外部プログラムの検索が出来るようになったので、
レコード数が多くても間違えてxargsを使うことはないはずです。

また、--no-externalを使うと強制的に外部プログラムの使用を抑制します。
これは1.5.0でも使えるはずです。

次回バージョンアップに反映される予定です。
報告ありがとうございました。

@ongaeshi

This comment has been minimized.

Show comment
Hide comment
@ongaeshi

ongaeshi Apr 13, 2014

Owner

Milkode 1.6 に反映されました。

Owner

ongaeshi commented Apr 13, 2014

Milkode 1.6 に反映されました。

@ongaeshi ongaeshi closed this Apr 13, 2014

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment