์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์ต๋๋ค.
Lucene QueryParser ๋ฌธ๋ฒ ์ ๋ฆฌ
์์ฑ์ผ : 2009/01/30 15:18:59
-
http://lucene.apache.org/java/1_4_3/queryparsersyntax.html ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ต๋๋ค.
์ฟผ๋ฆฌํ์๋ก ์ฟผ๋ฆฌ ๋ง๋ค๊ธฐ
- Query query = QueryParser.parse(String query, String field, Analyzer analyzer);
- ์ฟผ๋ฆฌํ์๋ฅผ ์์ฑํ ๋ ํ๋ผ๋ฏธํฐ๋ก "์ฟผ๋ฆฌ", "๊ธฐ๋ณธํ๋", "๋ถ์๊ธฐ" ๋ฅผ ์ง์ ํด์ค๋ค.
- ๊ฒ์ ์ ํ๋์ง์ (ํ๋:ํ ์คํธ ์ ํ์)์ ํด์ฃผ์ง ์์ผ๋ฉด "๊ธฐ๋ณธํ๋"์์ ๊ฒ์ํ๋ค.
ํ๋ ์ง์
title๊ณผ text๋ผ๋ ์ด๋ฆ์ ๋ ํ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์.
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด "๊ธฐ๋ณธํ๋"๋ฅผ text๋ก ์ค์ ํ ๋ค์,
- 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 ๋ฑ์ด ๊ฒ์๋ ์ ์์
์ค์ ์ฌ์ฉํ๋ฉด)
์์ฉํ๋ฉด ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ธ ์ ์๊ฒ ์ฃ ^^
- ๊ทผ์ ๊ฒ์
ex> 10๋จ์ด ๋ด์ jakarta์ apache๋ฅผ ๊ฒ์ํ๊ณ ์ถ๋ค๋ฉด..?
"jakarta apache"~10 -
๋ฒ์ ๊ฒ์
- [],{} ์ ์ฌ์ฉ (์๋ฃ๋ค์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ ํ retrievalํจ)
ex> mod_date:[20020101 TO 20030101] ===> 20020101๋ถํฐ 20030101๊น์ง (ํด๋น๋ ์ง ํฌํจ)
ex> title:(Aida TO Carmen) ===> Aida์ Carmen์ฌ์ด์ ๊ฒ๋ค (ํด๋น๋ฌธ์์ด ๋ฏธํฌํจ)
- [],{} ์ ์ฌ์ฉ (์๋ฃ๋ค์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ ํ retrievalํจ)
-
๊ฐ์ค์น ๊ฒ์
-
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
์ด ๊ธ์ ์คํ๋ง๋ ธํธ์์ ์์ฑ๋์์ต๋๋ค.