How select random documents in OrientDB - orientdb

I write online game. For game logic, I need select random users(etc) from database. How to achive this with java api? What the most perfomance way to do this?
I can use something like(pseudocode): select from User skip(randomNum(0,usersCount)) limit 1 but how write in documentation - skip has bad performance.

I have tried with this code
int numberRandom= 5;
String string="[";
int cluster= db.getMetadata().getSchema().getClass("User").getClusterIds()[0];
for(int i=0;i<numberRandom;i++){
int random=ThreadLocalRandom.current().nextInt(0, 96000);
if(i==(numberRandom-1))
string += cluster+":"+random + "]";
else
string += cluster+":"+random + ",";
}
Iterable<Vertex> result = g.command(new OCommandSQL("select from "+ string)).execute();
for(Vertex v:result)
System.out.println(v.getId());
Let me know if it can be a good solution for you

I wrote two java classes, both are getting X random users from a specific cluster.
The first one seams faster to me. (about 0.8s vs 1.2s)
testRandom.java
public class testRandom {
public static void main(String[] args) {
// TODO Auto-generated method stub
String nomeDb = "RandomUser";
try {
OServerAdmin serverAdmin = new OServerAdmin("remote:localhost/"+nomeDb).connect("root", "root");
if(serverAdmin.existsDatabase()){ // il db esiste
//connessione a db
OrientGraph g = new OrientGraph("remote:localhost/"+nomeDb);
//------------------------------------------------
long Tbegin,Tend;
float millis;
Tbegin = System.currentTimeMillis();
int numberRandom= 5;
int random;
String cluster = "user";
Iterable<Vertex> vertices = g.command(new OCommandSQL("select from cluster:"+cluster)).execute();
List<Vertex> v_array = new ArrayList<Vertex>();
List<Vertex> res = new ArrayList<Vertex>();
for(Vertex v : vertices){
v_array.add(v);
}
int arraysize = v_array.size();
for(int i=0;i<numberRandom;i++){
random=ThreadLocalRandom.current().nextInt(0, arraysize);
res.add(v_array.get(random));
}
for(Vertex v : res){
System.out.println(v.getId());
}
Tend = System.currentTimeMillis();
millis = (Tend-Tbegin);
System.out.println("--Execution time: "+millis/1000+ "s\n");
//------------------------------------------------
//chiude db
g.shutdown();
}
else{
System.out.println("Il database '"+ nomeDb + "' non esiste");
}
serverAdmin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
testRandomSkip.java
public class testRandom_skip {
public static void main(String[] args) {
// TODO Auto-generated method stub
String nomeDb = "RandomUser";
try {
OServerAdmin serverAdmin = new OServerAdmin("remote:localhost/"+nomeDb).connect("root", "root");
if(serverAdmin.existsDatabase()){ // il db esiste
//connessione a db
OrientGraph g = new OrientGraph("remote:localhost/"+nomeDb);
//------------------------------------------------
long Tbegin,Tend;
float millis;
Tbegin = System.currentTimeMillis();
int numberRandom= 5;
int random;
String cluster = "user";
List<Vertex> res = new ArrayList<Vertex>();
Iterable<Vertex> q_count_V = g.command(new OCommandSQL("select count(*) from cluster:"+cluster)).execute();
Long count_V = 0l;
for(Vertex v : q_count_V){
count_V=v.getProperty("count");
break;
}
for(int i=0;i<numberRandom;i++){
random=(int)ThreadLocalRandom.current().nextLong(0, count_V);
Iterable<Vertex> vertex = g.command(new OCommandSQL("select from cluster:"+cluster+" skip "+random+" limit 1")).execute();
for(Vertex v : vertex){
res.add(v);
break;
}
}
for(Vertex v : res){
System.out.println(v.getId());
}
Tend = System.currentTimeMillis();
millis = (Tend-Tbegin);
System.out.println("--Execution time: "+millis/1000+ "s\n");
//------------------------------------------------
//chiude db
g.shutdown();
}
else{
System.out.println("Il database '"+ nomeDb + "' non esiste");
}
serverAdmin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Hope it helps.
Ivan

Related

I can not Pie Chart entry converting from sql. I need your help for my android application

My application this code.
public float yvalue;
public String xvalue;
public void QuerySQL(String COMANDOSQL) {
ResultSet rs;
try {
Statement statement = connect.createStatement();
rs = statement.executeQuery(COMANDOSQL);
while (rs.next()) {
yvalue = rs.getInt( "ORAN" );
xvalue = rs.getString( "URUNGRUBU" );
pieEntries.add(new PieEntry(yvalue, xvalue)); /// this code does not fill pieEntry
}
} catch (Exception e) {
Log.e("ERRO", e.getMessage());
}
pieChart.setUsePercentValues(true);
pieDataSet = new PieDataSet(pieEntries,label);
pieData = new PieData(pieDataSet);
pieData.setDrawValues(true);
pieChart.setData(pieData);
pieChart.invalidate();
pieChart.setBackgroundColor( Color.TRANSPARENT);
pieDataSet.setColors(ColorTemplate.COLORFUL_COLORS);
moveoffScreen();
}

How to use sequence in multi-threaded enviroment

I try to create multiple vertexes in parallel:
public static void main(String[] args) throws InterruptedException {
//create db and seq
ODatabaseDocumentTx db = new ODatabaseDocumentTx("memory:/TestDB");
db.create();
OSequenceLibrary seqLib = db.getMetadata().getSequenceLibrary();
seqLib.createSequence("testSeq",
OSequence.SEQUENCE_TYPE.ORDERED,
new OSequence.CreateParams().setStart(0L).setIncrement(1)
);
OrientGraphFactory factory = new OrientGraphFactory("memory:/TestDB", "admin", "admin").setupPool(1, 8);
//mt
Executor executor = Executors.newFixedThreadPool(8);
CountDownLatch latch = new CountDownLatch(1000);
for (int i = 1; i <= 1000; i++) {
executor.execute(() -> {
OrientGraph g = factory.getTx();
try {
OSequence seq = g.getRawGraph().getMetadata().getSequenceLibrary().getSequence("testSeq");
OrientVertex v = g.addVertex("TestClass");
v.setProperty("seq", seq.next());
latch.countDown();
} finally {
g.shutdown();
}
});
}
latch.await(5, TimeUnit.SECONDS);
System.exit(0);
}
And receive lots of exceptions:
com.orientechnologies.orient.core.exception.OConcurrentModificationException:
Cannot UPDATE the record #7:0 because the version is not the latest.
Probably you are updating an old record or it has been modified by
another user (db=v2 your=v1)
How to use sequence in mt environment properly?
OrientDB is entirely based on an optimistic approach with no or few locks. For this reason you should catch the exception and retry. Example:
OrientGraph g = factory.getTx();
try {
for( int retry = 0; retry < 100; ++retry ){
try {
OSequence seq = g.getRawGraph().getMetadata().getSequenceLibrary().getSequence("testSeq");
OrientVertex v = g.addVertex("TestClass");
v.setProperty("seq", seq.next());
latch.countDown();
break;
} catch( ONeedRetryException e ) {
}
}
} finally {
g.shutdown();
}

Query in OrientDB

I try to print a query through the java console but nothing comes out. this is my code someone could help me.
I'm new to OrientDB and I'm just learning.
The query I need is to know the shortest path between two nodes and print this query on the Java console. It does not give me any errors but nothing comes out.
public class Graph {
private static final String DB_PATH = "C:/OrientDataBase/shortest_path";
static OrientGraphNoTx DBGraph;
static OrientGraphFactory factory;
public static void main(String[] args) {
factory = new OrientGraphFactory("plocal:"+DB_PATH);
DBGraph = factory.getNoTx();
HashMap<String, Vertex> nodes = new HashMap<String, Vertex>();
for(int i = 0; i <= 1000; i++)
{
Vertex v = DBGraph.addVertex("class:V");
v.setProperty("vertexID", i+"");
nodes.put(i+"", v);
}
try(BufferedReader br = new BufferedReader(new FileReader("C:/OrientDataBase/sp1.csv"))) {
int i=0;
for(String line; (line = br.readLine()) !=null ; ) {
if(i==0){
i++;
}
else{
String[] vertices = line.split(",");
String vertex1 = vertices[0];
String vertex2 = vertices[1];
String weight= vertices[2];
vertex2 = vertex2.replaceAll(" ", "");
Vertex v1 = nodes.get(vertex1);
Vertex v2 = nodes.get(vertex2);
Edge eLives = DBGraph.addEdge(null, v1, v2, "belongs");
eLives.setProperty("weight", weight);
System.out.println(v1+","+v2+","+weight);
String query = "select expand(shortestPath) from (select shortestPath(#10:0,#10:2,BOTH))";
Iterable<OrientVertex> res = DBGraph.command(new OCommandSQL(query)).execute();
while(res.iterator().hasNext()){
OrientVertex v = res.iterator().next();
System.out.println("rid: "+v.getId().toString()+"\tn:"+v.getProperty("n"));
}
}
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
I tried your code and you have to put the ticks when you do the query so, it becomes:
String query = "select expand(shortestPath) from (select shortestPath(#10:0,#10:2,'BOTH'))";
I used this csv file.
Hope it helps.
Regards

Why I get null.pointer exception, I am sure where aren't any null variables

public class Server {
public static Maze lab;
public static Socket s;
public static Socket z;
public static player human;
public static BufferedReader input;
public static OutputStream os;
public static InputStream is;
public static int n=-1;
public static connections info;
public static ObjectOutputStream oos;
public static void main(String[] args) {
try{
ServerSocket Serversocket = new ServerSocket(1900);
System.out.println("Maze Game Server Started on port " + Serversocket.getLocalPort());
FileInputStream fis = new FileInputStream("labirintas.cfg");
ObjectInputStream ois = new ObjectInputStream(fis);
lab = (Maze) ois.readObject();
fis.close();
ois.close();
info = new connections();
try {
while(true){
try{
s = Serversocket.accept();
z = Serversocket.accept();
System.out.println("Conection from: " + s.getLocalAddress().getHostAddress());
os = s.getOutputStream();
is = z.getInputStream();
oos = new ObjectOutputStream(os);
oos.writeObject(lab);
oos.flush();
n++;
//is.close();
human = new player(n);
human.start();
}catch(Exception exception){
System.out.println("nėra labirinto" + exception.getMessage());
System.exit(0);
}finally
{
s.close();
}
}
} catch ( Exception ex) {
System.out.println(ex.getMessage());
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
public static class player extends Thread{
public int x=0;
public int y=0;
public int counter = 0;
public String nick="";
public player(int n){
x=0;
y=0;
counter = n;
try{
input = new BufferedReader(new InputStreamReader(is));
nick = input.readLine();
System.out.println(counter+" "+x+" "+y+" "+ nick );
info.info(counter, x, y, nick);
oos.writeObject(info);
oos.flush();
}catch(Exception e){
System.out.println(e.getStackTrace());
}
}
public int getcooX(){
return x;
}
public int getcooY(){
return y;
}
public void moveUP(){
x--;
}
public void moveDOWN(){
x++;
}
public void moveLEFT(){
y--;
}
public void moveRIGHT(){
y++;
}
#Override
public void run(){
try{
while(true){
System.out.println(s + " with name: "+ nick + ": " + (s.isConnected()?"true":"false"));
if (input!=null){
String command = input.readLine();
System.out.println(command);
if(command.startsWith("MOVE_UP")){
System.out.println("up move");
if (lab.checkUP(x, y)==false){
System.out.println("up accepted");
x--;
info.info(counter, x, y, nick);
oos.writeObject(info);
oos.flush();
}
if(lab.isItWin(x, y)){
System.out.println("Winner");
s.close();
}
}
else if(command.startsWith("MOVE_LEFT")){
System.out.println("left move");
if (lab.checkLEFT(x, y)==false){
System.out.println("left accepted");
y--;
info.info(counter, x, y, nick);
oos.writeObject(info);
oos.flush();
}
if(lab.isItWin(x, y)){
System.out.println("Winner");
s.close();
}
}
else if(command.startsWith("MOVE_RIGHT")){
System.out.println("right move");
if (lab.checkRIGHT(x, y)==false){
System.out.println("right accepted");
y++;
info.info(counter, x, y, nick);
oos.writeObject(info);
oos.flush();
}
if(lab.isItWin(x, y)){
System.out.println("Winner");
s.close();
}
}
else if(command.startsWith("MOVE_DOWN")){
System.out.println("down move");
if (lab.checkRIGHT(x, y)==false){
System.out.println("down accepted");
y++;
info.info(counter, x, y, nick);
oos.writeObject(info);
oos.flush();
}
if(lab.isItWin(x, y)){
System.out.println("Winner");
s.close();
}
}
}
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
}
Why do I get java.lang.NullPointerException? I think I'm doing everything right. I don't understand why I get this.
here the client, and the connections classes.
public class Client implements ActionListener, Serializable{
public static JFrame main;
public static JPanel mainP;
public static JLabel text;
public static JButton New;
public static JButton exit;
public static JTextField nickas;
public JPanel labirintas;
public JMenuBar bar;
public JMenu file;
public JMenu edit;
public JMenuItem close;
public JFrame kurti;
public JLabel[][] label;
public JFrame zaidimas;
public static Maze lab;
public Color sienos = Color.BLACK;
public Color zaidejo = Color.RED;
public Color laimejimo = Color.GREEN;
public Color laukeliai = Color.WHITE;
public int cooX = 0;
public int cooY = 0;
public static PrintWriter output;
public static Socket s;
public static Socket f;
public static connections info;
public static InputStream os;
public static ObjectInputStream oos;
public static void main(String[] args) {
main = new JFrame("Pagrindinis meniu");
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainP = new JPanel();
text = new JLabel("Sveiki čia labirinto žaidimas. Įveskite savo vardą. Pasirinkite ką"
+ " darysite", SwingConstants.CENTER);
text.setVerticalAlignment(SwingConstants.TOP);
New = new JButton("Pradėti žaidimą");
nickas = new JTextField();
nickas.setDocument(new JTextFieldLimit(10));
mainP.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(10,0,0,0);
mainP.add(text, c);
c.gridx=0;
c.gridy = 1;
mainP.add(nickas, c);
c.gridx = 0;
c.gridy = 2;
mainP.add(New, c);
exit = new JButton("Išeiti iš žaidimo");
c.gridx = 0;
c.gridy = 3;
mainP.add(exit, c);
main.add(mainP);
main.setSize(500, 500);
main.show();
New.addActionListener(new Client());
exit.addActionListener(new Client());
}
#Override
public void actionPerformed(ActionEvent e){
Object source =e.getActionCommand();
if (source.equals("Pradėti žaidimą")){
String nick = nickas.getText();
try{
if(nick.isEmpty()){
JOptionPane.showMessageDialog(main, "Enter Your name", "Please Enter Your name", JOptionPane.ERROR_MESSAGE);
}
else{
s = new Socket("localhost",1900);
f = new Socket("localhost",1900);
os = s.getInputStream();
oos = new ObjectInputStream(os);
lab = (Maze) oos.readObject();
OutputStream is = f.getOutputStream();
//os.close();
output = new PrintWriter(is, true);
main.show(false);
zaidimas =new JFrame("Labirinto kurimas");//sukuriu nauja frame labirinto zaidimui
zaidimas.setLayout(new GridBagLayout());
zaidimas.setBackground(Color.BLACK);
GridBagConstraints ck = new GridBagConstraints(); //sukuriu nauja GridBagConstraints stiliui kurti
/////////////////////
zaidimas.setSize(1200, 600);
bar = new JMenuBar();//meniu juosta
file = new JMenu("File");
edit = new JMenu("Edit");
/////////////////////
bar.add(file);
bar.add(edit);
file.add(close = new JMenuItem("Close"));
close.setAccelerator(KeyStroke.getKeyStroke('C', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
//////////////////
JMenuItem spalvos = new JMenuItem("Spalvų meniu");
edit.add(spalvos);
spalvos.setAccelerator(KeyStroke.getKeyStroke('P', Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
/////////////////
ck.gridx = 0;//pridedu ja i tokias koordinates
ck.gridy = 0;
ck.fill = GridBagConstraints.HORIZONTAL;//issitemptu horizontaliai
ck.anchor = GridBagConstraints.NORTHWEST;
ck.gridwidth = 4;
ck.weightx = 1.0;
ck.weighty = 0.0;
zaidimas.add(bar, ck);
/////////////////////
labirintas = new JPanel();//labirinto panele
labirintas.setLayout(new GridLayout(lab.h,lab.v));
ck.gridy = 1;
ck.weightx = 0.8;
ck.weighty = 1.0;
ck.fill = GridBagConstraints.BOTH;
zaidimas.add(labirintas, ck);
/////////////////////
text = new JLabel("Online:");
ck.gridx = 4;
ck.weightx = 0.2;
ck.weighty=1.0;
ck.fill = GridBagConstraints.BOTH;
ck.anchor = GridBagConstraints.FIRST_LINE_START;
zaidimas.add(text, ck);
////////
label = new JLabel[lab.h][lab.v];//sukuriu masyva labeliu
////////////////
sienos();
///////////////
label[0][0].setBackground(zaidejo);
///////////////
try{
output.println(nick);
online();
}catch(Exception b){
}
zaidimas.addKeyListener(new KeyListener(){
#Override
public void keyReleased(KeyEvent K){
try{
if (K.getKeyCode()==KeyEvent.VK_A){
output.println("MOVE_LEFT");
output.flush();
if (lab.checkLEFT(cooX, cooY)==false){
label[cooX][cooY].setBackground(Color.white);
cooY--;
online();
}
if(lab.isItWin(cooX, cooY)){
JOptionPane.showMessageDialog(main, "Winner!", "You Won.", JOptionPane.PLAIN_MESSAGE);
System.out.println("Winner");
s.close();
f.close();
System.exit(0);
}
}
else if (K.getKeyCode()==KeyEvent.VK_W){
output.println("MOVE_UP");
output.flush();
if (lab.checkUP(cooX, cooY)==false){
label[cooX][cooY].setBackground(Color.white);
cooX--;
online();
}
if(lab.isItWin(cooX, cooY)){
JOptionPane.showMessageDialog(main, "Winner!", "You Won.", JOptionPane.PLAIN_MESSAGE);
System.out.println("Winner");
s.close();
f.close();
System.exit(0);
}
}
else if (K.getKeyCode()==KeyEvent.VK_D){
output.println("MOVE_RIGHT");
output.flush();
if (lab.checkRIGHT(cooX, cooY)==false){
label[cooX][cooY].setBackground(Color.white);
cooY++;
online();
}
if(lab.isItWin(cooX, cooY)){
JOptionPane.showMessageDialog(main, "Winner!", "You Won.", JOptionPane.PLAIN_MESSAGE);
System.out.println("Winner");
s.close();
f.close();
System.exit(0);
}
}
if (K.getKeyCode()==KeyEvent.VK_S){
output.println("MOVE_DOWN");
output.flush();
if (lab.checkDOWN(cooX, cooY)==false){
label[cooX][cooY].setBackground(Color.white);
cooX++;
online();
}
if(lab.isItWin(cooX, cooY)){
JOptionPane.showMessageDialog(main, "Winner!", "You Won.", JOptionPane.PLAIN_MESSAGE);
System.out.println("Winner");
s.close();
f.close();
System.exit(0);
}
}
}catch(Exception ex){
}
}
public void keyPressed(KeyEvent key){}
public void keyTyped(KeyEvent keyE){}
});
///////////////
zaidimas.show();
close.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
zaidimas.dispose();
main.dispose();
System.exit(0);
}
});
zaidimas.addWindowListener(new WindowAdapter(){
#Override
public void windowClosing(WindowEvent wind){
main.show(true);
mainP.show(true);
try{
s.close();
f.close();
}catch(Exception ex){
}
}
});
}
}catch(UnknownHostException exception){
JOptionPane.showMessageDialog(main, exception.getMessage()+exception, "Host error", JOptionPane.ERROR_MESSAGE);
exception.getStackTrace();
}
catch(Exception except){
JOptionPane.showMessageDialog(main, except.getMessage()+except, "Fatal error", JOptionPane.ERROR_MESSAGE);
except.getStackTrace();
}
}
else if (source.equals("Išeiti iš žaidimo")){
main.dispose();
System.exit(0);
}
}
// public void gamer(){//tikrina ar zaidejas yra laimejimo langelija
// label[game.getcooX()][game.getcooY()].setBackground(zaidejo);
// if (lab.isItWin(game.getcooX(), game.getcooY())){
// zaidimas.dispose();
// JOptionPane.showMessageDialog(main, "Jūs laimėjote!", "Sveikiname", JOptionPane.ERROR_MESSAGE);
// main.show(true);
// mainP.show(true);
// }
// }
public void sienos(){
for(int i=0;i<lab.h;i++){
for(int j=0; j<lab.v;j++){//ciklas braizyti sienom
label[i][j] = new JLabel();
int t=0,r=0,bot=0,l = 0;//i sias reiksmes isirasysiu sienu ploti
if (i==0){
if(lab.checkUP(i, j)) t=5; //tikrina ar borderis, jei borderis, tai storesne siena, jei ne, tai plonesne
}
else {
if(lab.checkUP(i, j)) t=2;
}
if (i==lab.h-1){
if(lab.checkDOWN(i, j)) bot=5;
}
else{
if(lab.checkDOWN(i, j)) bot=2;
}
if(j==lab.v-1){
if(lab.checkRIGHT(i, j)) r=5;
}
else{
if(lab.checkRIGHT(i, j)) r=2;
}
if (j==0){
if(lab.checkLEFT(i, j)) l=5;
}
else{
if(lab.checkLEFT(i, j)) l=2;
}
label[i][j].setBorder(BorderFactory.createMatteBorder(t, l, bot,r , sienos));
label[i][j].setOpaque(true); //kad matytusi labelis
if(lab.isItWin(i, j)) label[i][j].setBackground(laimejimo);
else label[i][j].setBackground(laukeliai);
labirintas.add(label[i][j]);
}
}
}
public void online(){
try{
info = (connections) oos.readObject();
}catch(Exception e){
System.out.println(e.getCause());}
text.setText("Online:");
for (int i=0;i<info.names.length;i++){
text.setText(text.getText() + "\n" + info.names[i]);
label[info.x[i]][info.y[i]].setBackground(Color.gray);
if(lab.isItWin(info.x[i], info.y[i])) label[info.x[i]][info.y[i]].setBackground(laimejimo);
label[cooX][cooX].setBackground(Color.white);
}
}
}
public class connections {
public String[] names;
public int[] x;
public int[] y;
public void connections(){
names = new String[99];
x = new int[99];
y = new int[99];
for (int i=0;i<100;i++){
names[i]="";
x[i]=0;
y[i]=0;
}
}
public void info(int n,int x,int y,String name){
names[n]=name;
this.x[n]=x;
this.y[n]=y;
}
}
Here's what I get from stacktrace:
java.lang.NullPointerException
at client.connections.info(connections.java:24)
at server.Server$player.<init>(Server.java:90)
at server.Server.main(Server.java:57)
The class connections does not have a constructor so the variable names never gets initialized. So when you call the method info and it tries to set names[n]=name it throws a NullPointerException because names is still null.
It looks like you have a constructor because you have a method named connections which is the same as the class name. However, you gave the method a return type of void which prevents it from being a constructor as constructors do not have a return type.
Change that line to:
public class connections {
public connections(){
...
You will now get a NullPointerException because you are attempting to set the 100th location of your names array in your constructor of the connections class.
You create the names array with length 99.
Then your for loop iterates through the numbers 0 through 99 (less than 100).
The problem is that the highest allowable index of names is 98 which is the 99th location. So when you try to set names[99] = "" it throws a NullPointerException.
Change your for loop to only go up to 99 instead of 100:
public connections(){
names = new String[99];
x = new int[99];
y = new int[99];
for (int i=0;i<99;i++){
names[i]="";
x[i]=0;
y[i]=0;
}
}
Or change the arrays to be length 100 to match the for loop:
public connections(){
names = new String[100];
x = new int[100];
y = new int[100];
for (int i=0;i<100;i++){
names[i]="";
x[i]=0;
y[i]=0;
}
}
Java Class Names
In Java the convention is to name all classes with mixed case with the first letter capitalized. See Java Naming Convention
Methods should be name with mixed case with the first letter lowercase.
You should change your connections class as follows:
public class Connections {
public Connections(){
...

How to implement boolean retrieval using hitcollector in below scenario

I am running my code on TREC documents and right now implementing scoring scheme to get number of relevant documents. However now i want to implement boolean retrieval, I am trying to use HitCollector.
below is my code..
public class BatchSearch {
private BatchSearch() {}
/** Simple command-line based search demo. */
public static void main(String[] args) throws Exception {
String usage =
"Usage:\tjava BatchSearch [-index dir] [-simfn similarity] [-field f] [-queries file]";
if (args.length > 0 && ("-h".equals(args[0]) || "-help".equals(args[0]))) {
System.out.println(usage);
System.out.println("Supported similarity functions:\ndefault: DefaultSimilary (tfidf)\n");
System.exit(0);
}
String index = "index";
String field = "contents";
String queries = null;
String simstring = "default";
for(int i = 0;i < args.length;i++) {
if ("-index".equals(args[i])) {
index = args[i+1];
i++;
} else if ("-field".equals(args[i])) {
field = args[i+1];
i++;
} else if ("-queries".equals(args[i])) {
queries = args[i+1];
i++;
} else if ("-simfn".equals(args[i])) {
simstring = args[i+1];
i++;
}
}
Similarity simfn = null;
if ("default".equals(simstring)) {
simfn = new DefaultSimilarity();
} else if ("bm25".equals(simstring)) {
simfn = new BM25Similarity();
} else if ("dfr".equals(simstring)) {
simfn = new DFRSimilarity(new BasicModelP(), new AfterEffectL(), new NormalizationH2());
} else if ("lm".equals(simstring)) {
simfn = new LMDirichletSimilarity();
}
if (simfn == null) {
System.out.println(usage);
System.out.println("Supported similarity functions:\ndefault: DefaultSimilary (tfidf)");
System.out.println("bm25: BM25Similarity (standard parameters)");
System.out.println("dfr: Divergence from Randomness model (PL2 variant)");
System.out.println("lm: Language model, Dirichlet smoothing");
System.exit(0);
}
IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index)));
IndexSearcher searcher = new IndexSearcher(reader);
searcher.setSimilarity(simfn);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_41);
BufferedReader in = null;
if (queries != null) {
in = new BufferedReader(new InputStreamReader(new FileInputStream(queries), "UTF-8"));
} else {
in = new BufferedReader(new InputStreamReader(new FileInputStream("queries"), "UTF-8"));
}
QueryParser parser = new QueryParser(Version.LUCENE_41, field, analyzer);
while (true) {
String line = in.readLine();
if (line == null || line.length() == -1) {
break;
}
line = line.trim();
if (line.length() == 0) {
break;
}
String[] pair = line.split(" ", 2);
Query query = parser.parse(pair[1]);
doBatchSearch(in, searcher, pair[0], query, simstring);
}
reader.close();
}
/**
* This function performs a top-1000 search for the query as a basic TREC run.
*/
public static void doBatchSearch(BufferedReader in, IndexSearcher searcher, String qid, Query query, String runtag)
throws IOException {
// Collect enough docs to show 5 pages
TopDocs results = searcher.search(query, 1000);
ScoreDoc[] hits = results.scoreDocs;
HashMap<String, String> seen = new HashMap<String, String>(1000);
int numTotalHits = results.totalHits;
int start = 0;
int end = Math.min(numTotalHits, 1000);
for (int i = start; i < end; i++) {
Document doc = searcher.doc(hits[i].doc);
String docno = doc.get("docno");
// There are duplicate document numbers in the FR collection, so only output a given
// docno once.
if (seen.containsKey(docno)) {
continue;
}
seen.put(docno, docno);
System.out.println(qid+" Q0 "+docno+" "+i+" "+hits[i].score+" "+runtag);
}
}
}
The scoring is done in doBatchSearch and now i want to implement HitCollector here.