From a49cd3f70ff230e1c850de9881631e3abcf34eab Mon Sep 17 00:00:00 2001
From: jsclose <jsclose@umich.edu>
Date: Wed, 7 Mar 2018 15:28:55 -0500
Subject: [PATCH] intial search engine driver + queryParser

---
 CMakeLists.txt  |   4 +-
 makefile        | 132 +++++++++++++++++++++++++++++++++++++-----------
 query/Query.cpp |  47 +++++++++++++++++
 query/Query.h   |  24 +++++++++
 search-engine   | Bin 0 -> 25400 bytes
 search.cpp      |  42 +++++++++++++++
 6 files changed, 219 insertions(+), 30 deletions(-)
 create mode 100644 query/Query.cpp
 create mode 100644 query/Query.h
 create mode 100755 search-engine
 create mode 100644 search.cpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4142ac7..7d8e2bd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,7 +3,7 @@ project(eecs398_search)
 
 set(CMAKE_CXX_STANDARD 11)
 
-add_executable(search
+add_executable(parser-test
         main.cpp
         shared/ProducerConsumerQueue.cpp
         shared/ProducerConsumerQueue.h
@@ -54,6 +54,8 @@ add_executable(ParserEndToEndTest
 add_executable(URLTEST shared/url.h shared/urlTest.cpp)
 
 
+add_executable(search-engine search.cpp query/Query.cpp)
+
 find_package(OpenSSL REQUIRED)
 
 target_link_libraries(crawl OpenSSL::SSL pthread)
diff --git a/makefile b/makefile
index bca718e..1a41caa 100644
--- a/makefile
+++ b/makefile
@@ -110,6 +110,19 @@ depend:
 	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
 .PHONY : depend
 
+#=============================================================================
+# Target rules for targets named search-engine
+
+# Build rule for target.
+search-engine: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 search-engine
+.PHONY : search-engine
+
+# fast build rule for target.
+search-engine/fast:
+	$(MAKE) -f CMakeFiles/search-engine.dir/build.make CMakeFiles/search-engine.dir/build
+.PHONY : search-engine/fast
+
 #=============================================================================
 # Target rules for targets named URLTEST
 
@@ -136,6 +149,19 @@ ParserEndToEndTest/fast:
 	$(MAKE) -f CMakeFiles/ParserEndToEndTest.dir/build.make CMakeFiles/ParserEndToEndTest.dir/build
 .PHONY : ParserEndToEndTest/fast
 
+#=============================================================================
+# Target rules for targets named StemmerTest
+
+# Build rule for target.
+StemmerTest: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 StemmerTest
+.PHONY : StemmerTest
+
+# fast build rule for target.
+StemmerTest/fast:
+	$(MAKE) -f CMakeFiles/StemmerTest.dir/build.make CMakeFiles/StemmerTest.dir/build
+.PHONY : StemmerTest/fast
+
 #=============================================================================
 # Target rules for targets named TokenizerTest
 
@@ -176,30 +202,17 @@ crawl/fast:
 .PHONY : crawl/fast
 
 #=============================================================================
-# Target rules for targets named StemmerTest
-
-# Build rule for target.
-StemmerTest: cmake_check_build_system
-	$(MAKE) -f CMakeFiles/Makefile2 StemmerTest
-.PHONY : StemmerTest
-
-# fast build rule for target.
-StemmerTest/fast:
-	$(MAKE) -f CMakeFiles/StemmerTest.dir/build.make CMakeFiles/StemmerTest.dir/build
-.PHONY : StemmerTest/fast
-
-#=============================================================================
-# Target rules for targets named search
+# Target rules for targets named parser-test
 
 # Build rule for target.
-search: cmake_check_build_system
-	$(MAKE) -f CMakeFiles/Makefile2 search
-.PHONY : search
+parser-test: cmake_check_build_system
+	$(MAKE) -f CMakeFiles/Makefile2 parser-test
+.PHONY : parser-test
 
 # fast build rule for target.
-search/fast:
-	$(MAKE) -f CMakeFiles/search.dir/build.make CMakeFiles/search.dir/build
-.PHONY : search/fast
+parser-test/fast:
+	$(MAKE) -f CMakeFiles/parser-test.dir/build.make CMakeFiles/parser-test.dir/build
+.PHONY : parser-test/fast
 
 crawler/SocketReader.o: crawler/SocketReader.cpp.o
 
@@ -289,7 +302,7 @@ main.o: main.cpp.o
 # target to build an object file
 main.cpp.o:
 	$(MAKE) -f CMakeFiles/crawl.dir/build.make CMakeFiles/crawl.dir/main.cpp.o
-	$(MAKE) -f CMakeFiles/search.dir/build.make CMakeFiles/search.dir/main.cpp.o
+	$(MAKE) -f CMakeFiles/parser-test.dir/build.make CMakeFiles/parser-test.dir/main.cpp.o
 .PHONY : main.cpp.o
 
 main.i: main.cpp.i
@@ -299,7 +312,7 @@ main.i: main.cpp.i
 # target to preprocess a source file
 main.cpp.i:
 	$(MAKE) -f CMakeFiles/crawl.dir/build.make CMakeFiles/crawl.dir/main.cpp.i
-	$(MAKE) -f CMakeFiles/search.dir/build.make CMakeFiles/search.dir/main.cpp.i
+	$(MAKE) -f CMakeFiles/parser-test.dir/build.make CMakeFiles/parser-test.dir/main.cpp.i
 .PHONY : main.cpp.i
 
 main.s: main.cpp.s
@@ -309,7 +322,7 @@ main.s: main.cpp.s
 # target to generate assembly for a file
 main.cpp.s:
 	$(MAKE) -f CMakeFiles/crawl.dir/build.make CMakeFiles/crawl.dir/main.cpp.s
-	$(MAKE) -f CMakeFiles/search.dir/build.make CMakeFiles/search.dir/main.cpp.s
+	$(MAKE) -f CMakeFiles/parser-test.dir/build.make CMakeFiles/parser-test.dir/main.cpp.s
 .PHONY : main.cpp.s
 
 parser/Parser.o: parser/Parser.cpp.o
@@ -366,6 +379,60 @@ parser/tests/parserTest.cpp.s:
 	$(MAKE) -f CMakeFiles/ParserEndToEndTest.dir/build.make CMakeFiles/ParserEndToEndTest.dir/parser/tests/parserTest.cpp.s
 .PHONY : parser/tests/parserTest.cpp.s
 
+query/Query.o: query/Query.cpp.o
+
+.PHONY : query/Query.o
+
+# target to build an object file
+query/Query.cpp.o:
+	$(MAKE) -f CMakeFiles/search-engine.dir/build.make CMakeFiles/search-engine.dir/query/Query.cpp.o
+.PHONY : query/Query.cpp.o
+
+query/Query.i: query/Query.cpp.i
+
+.PHONY : query/Query.i
+
+# target to preprocess a source file
+query/Query.cpp.i:
+	$(MAKE) -f CMakeFiles/search-engine.dir/build.make CMakeFiles/search-engine.dir/query/Query.cpp.i
+.PHONY : query/Query.cpp.i
+
+query/Query.s: query/Query.cpp.s
+
+.PHONY : query/Query.s
+
+# target to generate assembly for a file
+query/Query.cpp.s:
+	$(MAKE) -f CMakeFiles/search-engine.dir/build.make CMakeFiles/search-engine.dir/query/Query.cpp.s
+.PHONY : query/Query.cpp.s
+
+search.o: search.cpp.o
+
+.PHONY : search.o
+
+# target to build an object file
+search.cpp.o:
+	$(MAKE) -f CMakeFiles/search-engine.dir/build.make CMakeFiles/search-engine.dir/search.cpp.o
+.PHONY : search.cpp.o
+
+search.i: search.cpp.i
+
+.PHONY : search.i
+
+# target to preprocess a source file
+search.cpp.i:
+	$(MAKE) -f CMakeFiles/search-engine.dir/build.make CMakeFiles/search-engine.dir/search.cpp.i
+.PHONY : search.cpp.i
+
+search.s: search.cpp.s
+
+.PHONY : search.s
+
+# target to generate assembly for a file
+search.cpp.s:
+	$(MAKE) -f CMakeFiles/search-engine.dir/build.make CMakeFiles/search-engine.dir/search.cpp.s
+.PHONY : search.cpp.s
+
 shared/Document.o: shared/Document.cpp.o
 
 .PHONY : shared/Document.o
@@ -399,7 +466,7 @@ shared/ProducerConsumerQueue.o: shared/ProducerConsumerQueue.cpp.o
 
 # target to build an object file
 shared/ProducerConsumerQueue.cpp.o:
-	$(MAKE) -f CMakeFiles/search.dir/build.make CMakeFiles/search.dir/shared/ProducerConsumerQueue.cpp.o
+	$(MAKE) -f CMakeFiles/parser-test.dir/build.make CMakeFiles/parser-test.dir/shared/ProducerConsumerQueue.cpp.o
 .PHONY : shared/ProducerConsumerQueue.cpp.o
 
 shared/ProducerConsumerQueue.i: shared/ProducerConsumerQueue.cpp.i
@@ -408,7 +475,7 @@ shared/ProducerConsumerQueue.i: shared/ProducerConsumerQueue.cpp.i
 
 # target to preprocess a source file
 shared/ProducerConsumerQueue.cpp.i:
-	$(MAKE) -f CMakeFiles/search.dir/build.make CMakeFiles/search.dir/shared/ProducerConsumerQueue.cpp.i
+	$(MAKE) -f CMakeFiles/parser-test.dir/build.make CMakeFiles/parser-test.dir/shared/ProducerConsumerQueue.cpp.i
 .PHONY : shared/ProducerConsumerQueue.cpp.i
 
 shared/ProducerConsumerQueue.s: shared/ProducerConsumerQueue.cpp.s
@@ -417,7 +484,7 @@ shared/ProducerConsumerQueue.s: shared/ProducerConsumerQueue.cpp.s
 
 # target to generate assembly for a file
 shared/ProducerConsumerQueue.cpp.s:
-	$(MAKE) -f CMakeFiles/search.dir/build.make CMakeFiles/search.dir/shared/ProducerConsumerQueue.cpp.s
+	$(MAKE) -f CMakeFiles/parser-test.dir/build.make CMakeFiles/parser-test.dir/shared/ProducerConsumerQueue.cpp.s
 .PHONY : shared/ProducerConsumerQueue.cpp.s
 
 shared/urlTest.o: shared/urlTest.cpp.o
@@ -589,14 +656,15 @@ help:
 	@echo "... clean"
 	@echo "... depend"
 	@echo "... edit_cache"
+	@echo "... search-engine"
 	@echo "... URLTEST"
 	@echo "... ParserEndToEndTest"
+	@echo "... rebuild_cache"
+	@echo "... StemmerTest"
 	@echo "... TokenizerTest"
 	@echo "... StringProcessingTest"
 	@echo "... crawl"
-	@echo "... rebuild_cache"
-	@echo "... StemmerTest"
-	@echo "... search"
+	@echo "... parser-test"
 	@echo "... crawler/SocketReader.o"
 	@echo "... crawler/SocketReader.i"
 	@echo "... crawler/SocketReader.s"
@@ -615,6 +683,12 @@ help:
 	@echo "... parser/tests/parserTest.o"
 	@echo "... parser/tests/parserTest.i"
 	@echo "... parser/tests/parserTest.s"
+	@echo "... query/Query.o"
+	@echo "... query/Query.i"
+	@echo "... query/Query.s"
+	@echo "... search.o"
+	@echo "... search.i"
+	@echo "... search.s"
 	@echo "... shared/Document.o"
 	@echo "... shared/Document.i"
 	@echo "... shared/Document.s"
diff --git a/query/Query.cpp b/query/Query.cpp
new file mode 100644
index 0000000..8f2a62b
--- /dev/null
+++ b/query/Query.cpp
@@ -0,0 +1,47 @@
+//
+// Created by Jake Close on 3/7/18.
+//
+
+#include "Query.h"
+#include <iostream>
+using namespace std;
+
+/*
+ * Searchs the index for the query
+ *
+ *
+ */
+
+void QueryParser::search()
+	{
+
+	if( strcmp(CompleteQuery, "-quit") == 0 )
+		{
+		cout << "Thank you for using C++lue search engine" << endl;
+		exit(0);
+		}
+	else if(strcmp(CompleteQuery, "-help") == 0)
+		{
+		cout << "Manual" << endl;
+		}
+
+
+
+	return;
+
+	}
+
+
+/*
+ *
+ * Prints the top 10 results
+ *
+ */
+
+void QueryParser::printResults()
+	{
+	cout << " Generated XXX results in about XXX seconds " << endl;
+
+
+	return;
+	}
\ No newline at end of file
diff --git a/query/Query.h b/query/Query.h
new file mode 100644
index 0000000..0ec50a0
--- /dev/null
+++ b/query/Query.h
@@ -0,0 +1,24 @@
+//
+// Created by Jake Close on 3/7/18.
+//
+
+#pragma once
+
+using namespace std;
+class QueryParser
+	{
+
+public:
+	QueryParser( const char * query_in) : CompleteQuery( query_in )
+		{ };
+
+	void search();
+
+	void printResults();
+
+private:
+	const char* CompleteQuery;
+
+	};
+
+
diff --git a/search-engine b/search-engine
new file mode 100755
index 0000000000000000000000000000000000000000..2a988337d4ec0110e82d9f37c9b1615797ceb080
GIT binary patch
literal 25400
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
G0RIP5*A+Yf

literal 0
HcmV?d00001

diff --git a/search.cpp b/search.cpp
new file mode 100644
index 0000000..7225e1a
--- /dev/null
+++ b/search.cpp
@@ -0,0 +1,42 @@
+//
+// Created by Jake Close on 3/7/18.
+//
+
+#include <iostream>
+#include <stdlib.h>
+#include <unistd.h>
+#include "query/Query.h"
+
+
+using namespace std;
+
+
+int main( int argc, char *argv[] )
+	{
+
+
+	cout << " --- WELCOME EECS 398 SEARCH ENGINE --- " << endl;
+	cout << endl;
+	cout << "What would you like to know?  " << endl;
+	cout << endl;
+	cout << "type -q to exit or -help for more information" << endl;
+	string q;
+
+
+
+	while(true)
+		{
+
+		while ( getline( cin, q ) && !q.empty( ))
+			{
+			QueryParser *query = new QueryParser( q.c_str( ));
+			query->search( );
+			query->printResults( );
+			}
+
+		}
+
+
+	return 0;
+
+	}
\ No newline at end of file
-- 
GitLab