์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

Lucene QueryParser ๋ฌธ๋ฒ• ์ •๋ฆฌ

์ž‘์„ฑ์ž : ALEX PARK

์ž‘์„ฑ์ผ : 2009/01/30 15:18:59

 

์ฟผ๋ฆฌํŒŒ์„œ๋กœ ์ฟผ๋ฆฌ ๋งŒ๋“ค๊ธฐ

 

 

  1. Query query = QueryParser.parse(String query, String field, Analyzer analyzer);
  • ์ฟผ๋ฆฌํŒŒ์„œ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ "์ฟผ๋ฆฌ", "๊ธฐ๋ณธํ•„๋“œ", "๋ถ„์„๊ธฐ" ๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค.
  • ๊ฒ€์ƒ‰ ์‹œ ํ•„๋“œ์ง€์ •(ํ•„๋“œ:ํ…์ŠคํŠธ ์˜ ํ˜•์‹)์„ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด "๊ธฐ๋ณธํ•„๋“œ"์—์„œ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

 

 

ํ•„๋“œ ์ง€์ •

 

title๊ณผ text๋ผ๋Š” ์ด๋ฆ„์˜ ๋‘ ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด "๊ธฐ๋ณธํ•„๋“œ"๋ฅผ text๋กœ ์„ค์ •ํ•œ ๋‹ค์Œ,

  1. Query query = QueryParser.parse(query, "text", analyzer);

 

query1) title:"The right way" AND text: go

--> titleํ•„๋“œ์—์„œ "The right way" ๋ผ๋Š” ํ…์ŠคํŠธ ์™€ text ํ•„๋“œ์—์„œ go ๋ผ๋Š” ํ…์ŠคํŠธ๋ฅผ ๊ฒ€์ƒ‰.

query2) title:"The right way" AND go

--> query1๊ณผ ๊ฐ™์€ ๋ฌธ์žฅ์ด๋ฉฐ, text๋Š” ๊ธฐ๋ณธํ•„๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•„๋“œ์ง€์ •์ž๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

query3) title:The right way

--> titleํ•„๋“œ์—์„œ The๋ฅผ ์ฐพ๊ณ  ๊ธฐ๋ณธํ•„๋“œ(text)์—์„œ right์™€ way๋ฅผ ์ฐพ๋Š”๋‹ค.

 

ํ…€ ์ˆ˜์ •์ž

 

  • ์™€์ผ๋“œ์นด๋“œ ๊ฒ€์ƒ‰

    • ?, * ๊ฐ€ ์“ฐ์ž„
            ? : ํ•œ ๋ฌธ์ž๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Œ
               ex) te?t           ===> test, text๋“ฑ์ด ๊ฒ€์ƒ‰๋จ
            * : ์—ฌ๋Ÿฌ ๋ฌธ์ž๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Œ
               ex) test*         ===> tester, tested, testing ๋“ฑ์ด ๊ฒ€์ƒ‰๋จ
      * ์ฒซ ๊ธ€์ž๋Š” ?, *๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค.

       

  • ํผ์ง€ ๊ฒ€์ƒ‰
       tilde '~' ๊ฐ€ ์“ฐ์ž„
       ex> roam~        ===> foam, roar ๋“ฑ์ด ๊ฒ€์ƒ‰๋  ์ˆ˜ ์žˆ์Œ
    ์‹ค์ œ์‚ฌ์šฉํ™”๋ฉด)
    dangguk.bmp
     ์‘์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์“ธ ์ˆ˜ ์žˆ๊ฒ ์ฃ  ^^
    obama.bmp
  • ๊ทผ์ ‘ ๊ฒ€์ƒ‰
         ex>   10๋‹จ์–ด ๋‚ด์— jakarta์™€ apache๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด..?
                "jakarta apache"~10
  • ๋ฒ”์œ„ ๊ฒ€์ƒ‰

    • [],{} ์„ ์‚ฌ์šฉ (์ž๋ฃŒ๋“ค์„ ์‚ฌ์ „์‹์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ retrievalํ•จ)
      ex> mod_date:[20020101 TO 20030101]    ===> 20020101๋ถ€ํ„ฐ 20030101๊นŒ์ง€ (ํ•ด๋‹น๋‚ ์งœ ํฌํ•จ)
      ex> title:(Aida TO Carmen)      ===> Aida์™€ Carmen์‚ฌ์ด์˜ ๊ฒƒ๋“ค (ํ•ด๋‹น๋ฌธ์ž์—ด ๋ฏธํฌํ•จ)
  • ๊ฐ€์ค‘์น˜ ๊ฒ€์ƒ‰

    • jakarta์™€ apache๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ jakarta์ชฝ์— ๋” ๋น„์ค‘์„ ๋‘๊ณ  ์‹ถ๋‹ค?

      ex> jakarta^4 apache
      "inervit db"^4 "oracle db" ์™€ ๊ฐ™์ด Phrase Term์—๋„ ์ ์šฉ๊ฐ€๋Šฅ

    • ๊ฐ€์ค‘์น˜๋Š” ๊ธฐ๋ณธ์ด 1์ด๋ฉฐ, ์–‘์ˆ˜์ด์–ด์•ผ ํ•˜๋ฉฐ 0.2์™€ ๊ฐ™์ด ์†Œ์ˆ˜๋กœ๋„ ์ง€์ • ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋ถˆ๋ฆฐ ์—ฐ์‚ฐ

 

"ํ…€"๋“ค์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์กฐํ•ฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ.

AND, +, OR, NOT, - ์ด ์žˆ๋‹ค. (๋Œ€๋ฌธ์ž์ž„์„ ์ฃผ์˜!)

  • OR
    jakarta ๋˜๋Š” apache๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด?

    ===>jakarta OR apache

  • AND
    jakarta ์™€ apache๊ฐ€ ๊ฐ™์ด ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด?
    ===> jakarta OR apache

  • +
    jakarta๋Š” ๊ผญ ์กด์žฌํ•˜๋ฉฐ apache๋Š” ์กด์žฌํ•  ์ˆ˜ ๋„ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด?
    ===> +jakarta apache

  • NOT
    "jakarta apache"๋Š” ํฌํ•จํ•˜์ง€๋งŒ "jakarta lucene"์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด?
    ===> "jakarta apache" NOT "jakarta lucene"

  • -
    "jakarta apache"๋Š” ํฌํ•จํ•˜์ง€๋งŒ "jakarta lucene"์€ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด?
    ===> "jakarta apache" - "jakarta lucene"

 

๊ทธ๋ฃนํ™”

 

๋ฃจ์”ฌ์—์„œ "์ ˆ"๋“ค์„ "์„œ๋ธŒ์ฟผ๋ฆฌ"๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ()๋ฅผ ์ด์šฉํ•œ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.
ex> (jakarta OR apache) AND website

์•„๋ž˜์™€ ๊ฐ™์ด ํ•„๋“œ ๊ทธ๋ฃนํ™”๋„ ๋œ๋‹ค.
ex> title:(+return +"pink partner")             ====> ()์•ˆ์— ์žˆ๋Š”๊ฒƒ์„ title์˜ ํ•„๋“œ์—์„œ ์ฐพ์Œ.

Escape ํŠน์ˆ˜ ๋ฌธ์ž

   +-&&|!()[]^"~*?:\ ์ฒ˜๋Ÿผ ํ…€์ˆ˜์ •์ž๋‚˜ ๋ถˆ๋ฆฐ์ฟผ๋ฆฌ ๋“ฑ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ๋Š” ๋ฌธ์ž์—ด๋“ค์€ \๋ฅผ ํ†ตํ•ด ํ‘œํ˜„
   ํ•  ์ˆ˜ ์žˆ๋‹ค.
   (1+1):2 ๋ฅผ ๊ฒ€์ƒ‰ํ• ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ฐ๋ฉด ๋œ๋‹ค.
   ex> \(1\+1\)\:2

์ด ๊ธ€์€ ์Šคํ”„๋ง๋…ธํŠธ์—์„œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

+ Recent posts