์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์˜คํ”ˆ์†Œ์Šค๊ฒ€์ƒ‰์—”์ง„ - ๋ฃจ์”ฌ

ipod apple 2009. 2. 16. 22:33
๋ฐ˜์‘ํ˜•

์˜คํ”ˆ์†Œ์Šค๊ฒ€์ƒ‰์—”์ง„ - ๋ฃจ์”ฌ

๋ถ„๋ฅ˜์—†์Œ 2007/12/26 14:21
์™œ ๋ฃจ์”ฌ์ธ๊ฐ€? SQL๋กœ ๊ฒ€์ƒ‰๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด ์•ˆ๋˜๋‚˜?

like '%๊ฒ€์ƒ‰์–ด%'

์ด๋Ÿฐ SQL์€ ์„ฑ๋Šฅ์ €ํ•˜์˜ ์ฃผ๋ฒ”์ด๋‹ค. DB ์ธ๋ฑ์Šค๋ฅผ ๋ฌด์šฉ์ง€๋ฌผ๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
like๋ฌธ์„ ์“ฐ๋Š” ๋Œ€์‹  DBMS์ „๋ฌธ๊ฒ€์ƒ‰(fulltext search)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด sqlserver๋Š” ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค.
sqlserver์—์„œ fulltext๊ฒ€์ƒ‰
ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•๋„ order by๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ๋‚˜๋น ์ง„๋‹ค.
mysql์—์„œ ํ’€ํ…์ŠคํŠธ ๊ฒ€์ƒ‰
๋˜ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š”๋“ฑ์˜ ์•ฝ์ ์ด ์žˆ๋‹ค.
์„ธ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๊ฒ€์ƒ‰์—”์ง„์˜ ์ƒ‰์ธ๊ตฌ์กฐ๋ฅผ DBMS๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ…Œ๊ทธ์‹œ์Šคํ…œ์ด ์ œ์ผ ๋งŽ์ด ์•Œ๋ ค์ง„ ์‚ฌ๋ก€์ด๋‹ค.
์‚ฌ์šฉ์ž ์‚ฝ์ž… ์ด๋ฏธ์ง€
๋งŒ์•ฝ ๋„ค์ด๋ฒ„์˜ ๊ฒ€์ƒ‰๊ฒฐ๊ณผ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋ฐ์ดํƒ€์†Œ์Šค์—์„œ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค๋ฉด? ์ด ๋ฐฉ๋ฒ•๋กœ๋„ ํ•ด๊ฒฐ์ด ์•Š๋œ๋‹ค

๋ฃจ์”ฌ์— ํฌ๋กค๋Ÿฌ๋Š” ์—†๋‹ค. ๊ธธ์žƒ์ง€ ๋งˆ์‹œ๊ธธ.
์‚ฌ์šฉ์ž ์‚ฝ์ž… ์ด๋ฏธ์ง€

๋ฃจ์”ฌ์€ ์™„์„ฑํ’ˆ์ด ์•„๋‹ˆ๋‹ค. ๋ ˆ๊ณ ๋ธ”๋ก์ฒ˜๋Ÿผ ์กฐ๋ฆฝํ•ด์•ผ ์“ธ์ˆ˜ ์žˆ๋‹ค
์ฆ‰ ๋ฃจ์”ฌ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ผ๋ฟ์ด๋‹ค.
์†Œ์Šค์˜ˆ์ œ
public void simpleLucene()
{
Analyzer analyzer = new StandardAnalyzer();

// Store the index in memory:
Directory directory = new RAMDirectory();

// To store an index on disk, use this instead (note that the
// parameter true will overwrite the index in that directory
// if one exists):
// Directory directory = FSDirectory.getDirectory("/tmp/testindex", true);

IndexWriter iwriter = new IndexWriter(directory, analyzer, true);
iwriter.setMaxFieldLength(25000);

Document doc = new Document();
String text = "This is the text to be indexed.";
doc.add(new Field("fieldname", text, Field.Store.YES,
Field.Index.TOKENIZED));
iwriter.addDocument(doc);
iwriter.close();

// Now search the index:
IndexSearcher isearcher = new IndexSearcher(directory);

// Parse a simple query that searches for "text":
QueryParser parser = new QueryParser("fieldname", analyzer);
Query query = parser.parse("text");
Hits hits = isearcher.search(query);
assertEquals(1, hits.length());

// Iterate through the results:
for (int i = 0; i < hits.length(); i++)
{
Document hitDoc = hits.doc(i);
assertEquals("This is the text to be indexed.", hitDoc.get("fieldname"));
}

isearcher.close();
directory.close();
}
๋ฃจ์”ฌ์„ ์จ์•ผ ํ•˜๋Š” ์ด์œ 
(1)๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ชจ์Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ ์—ฐ์„ฑ 100%๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ํ˜•ํƒœ์†Œ๋ถ„์„์„ ์“ธ๊ฑด์ง€ ์•„๋‹ˆ๋ฉด N-Gram๋ฐฉ์‹์„ ์“ธ๊ฑด์ง€๋“ฑ์— ๋Œ€ํ•œ ํŒ๋‹จ์„ ํ•œ๋‹ค์Œ์— Analyzer๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.
(2)๊ฒ€์ƒ‰๊ฒฐ๊ณผ ํ•˜์ด๋ผ์ดํŠธ ์ œ๊ณตํ•œ๋‹ค.
(3)๋ณต์žกํ•œ ๊ฒ€์ƒ‰ํ‘œํ˜„์‹ ์ œ๊ณต        
    ex)์ฒ ์ธ AND ์Šคํฌ์ธ 
         ์ฒ ์ธ*
         title:์ฒ ์ธ -subject:์Šคํฌ์ธ 
         title:"์ฒ ์ธ ์Šคํฌ์ธ "~5
         edate:[2007/10/10 TO 2007/12/30]

(4)์†๋„ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ‰์ธ๋ฐ์ดํƒ€๋ฅผ ์˜ฌ๋ ค๋†“๊ณ  ์“ธ์ˆ˜ ์žˆ๋‹ค
(5)๋„ค์ด๋ฒ„์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋ฐ์ดํƒ€์†Œ์Šค์—์„œ ํ†ตํ•ฉ๊ฒ€์ƒ‰ํ• ์ˆ˜ ์žˆ๋‹ค.
MultiSearcher searcher = new MultiSearcher (new Searchable[] { searchX, searchY });
Searcher searcher = new ParallelMultiSearcher (new Searchable[] { searchX, searchY });
๋ฐ˜์‘ํ˜•