0

問題: 特定のソースから accumulo インスタンスへのデータが、検索インターフェースのサブセットを介してクライアント アプリケーションに返されません。

検索方法「A」を使用すると結果が得られますが、検索方法「B」を使用すると結果が得られません。

メソッド「A」とメソッド「B」は実際には異なるテーブルにヒットしているという予感があります。
それを証明するには、テーブルに入ってくるデータのストリームにフックを挿入し、メッセージのソースを示すデータを grep する方法が必要です。システムを停止する必要があるため、プログラムで何もできません。これは現在のオプションではありません。

「grep」および「egrep」コマンドがあることがマニュアルからわかります。grep のヘルプ ファイルには、これを正規表現に使用しないように記載されています。また、egrep がデータベースに存在することがわかっているレコードを返してくれないようです。

例:
交換のレコードには行が含まれています<gml:pos>23.05507 113.5268</gml:pos>。これを egrep するには、accumulo シェルにログインし、レコードが存在するテーブルを選択して、次のように入力しますegrep ^:pos>23.*113.*

何も戻ってこない。
考えられるコマンドのすべてのバリエーションを試しました(引用する、引用しない、23.*のみを検索するなど)。

ここで何が欠けていますか?

4

2 に答える 2

0

正規表現が正しくありません。あなたの始まりは、^:pos「:posがレコードを開始する場所に一致する」ことを意味します

次のように変更する必要があります。

egrep "^.*pos>23.*113.*"

これは、「先頭から pos>23 までの任意の数の文字に一致し、113 が表示されるまで任意の数の文字に一致し、それ以上の文字に一致する」ことを示しています。鍵は との.*^pos

ただし、これは何でも一致することに注意してくださいpos>23。例えば:

root@accumuloinstance testTable> insert "<gml:pos>23.05507 113.5268</gml:pos>" "" "" ""
root@accumuloinstance testTable> insert "<gml:pos>232.05507 113.5268</gml:pos>" "" "" ""
root@accumuloinstance testTable> insert "<gml:pos>232XXX113.5268</gml:pos>" "" "" ""
root@accumuloinstance testTable> egrep "^.*pos>23.*113.*"
<gml:pos>23.05507 113.5268</gml:pos> : []
<gml:pos>232.05507 113.5268</gml:pos> : []
<gml:pos>232XXX113.5268</gml:pos> : []

何を探しているのか正確にはわかりませんが、試してみてください。

root@accumuloinstance testTable> egrep "^.*pos>23[.].* 113[.].*"
<gml:pos>23.05507 113.5268</gml:pos> : []

これは 23.xxxx 113.xxxxx と一致するため、正確に 23.something と 113.something が得られます。

探している結果が得られない場合は、次のことを試してください。egrep ".*"レコードが返されない場合は、レコードがないか、可視性が一致しません。

于 2014-06-14T01:33:28.607 に答える
-1

正規表現の先頭の ^ は、「:pos」を行頭に固定しているようです。行頭が「」なので

$ echo '<gml:pos>23.05507 113.5268</gml:pos>' | egrep '^:pos>23.*113.*'
$ echo '<gml:pos>23.05507 113.5268</gml:pos>' | egrep ':pos>23.*113.*'
<gml:pos>23.05507 113.5268</gml:pos>
于 2014-06-13T23:34:17.230 に答える